{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Rental Listing Inquires 特征工程查看了老师提供的文档后，共做了如下处理："
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 1、对类别型特征做了labelencoder ,老师使用的使用的是map方法直接映射为数字"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 2、删除对类别特征无影响的特征listing_id，删除此特征"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 3、处理噪声，删除price >10000,对bathroom 为 112、10、20的异常特征值处理"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 4、构造新特征：单位bathroom的价格、单位bedroom价格"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 5、构造新特征：room_diff:bathroom 数目 - bedroom 数目\n",
    "              room_sum:bathroom 数目 + bedroom 数目"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 6、对created特征分解：先把created特征转换为日期类型（使用np.to_datetime),存入date特征，\n",
    "然后对date特征分别取 year、month、day、dayofweek、dayofyear、hour\n",
    "六个特征作为新特征加入数据集中，然后删除 created、date 特征，完成分解"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 7、删除description、building_id、photos、street_address特征"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 8、将manager_id划分等级，按manger_id的value_counts 取分位数，然后划分等级存在          top_1_manager等9个特征中； top_1_manager 的取法为，当manager_id的value_counts    的值大于其99分位数时，top_1_manager 赋1 否则为 0，其他等级类似取法. \n",
    "   使用了pd的value_counts()方法，此方法为对某列的值计数统计；\n",
    "   还有np的percentile（np数组，q分位数，axis在哪个轴上计算 0：代表纵列上求，\n",
    "   1：代表横列上求，aixs不填时是对np数组排序后取分位数，keepdims指保持维度不变）方法"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 9、对经纬度(latitude/longitude)两个做聚类降维，没看明白后续上网查资料"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 10、对display_address特征做平均值编码,平均值编码meanencoder 适用于定性高基数特征,\n",
    "   平均值编码实现过程，上网查资料\n",
    "   labelencoder编码产生一个序列，要求模型对顺序不敏感，比如树模型\n",
    "   onehotencoder编码适用类别不多的情况,类别比较多的话会产生大量的稀疏类别列，影响性能·"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 11、对features特征做词频统计 适用CountVectorizer()方法和sparse.hstack()方法，\n",
    "    这两种方法需要上网查资料看， 做完词频后会产生大量特征列"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 导入工具包"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "from matplotlib import pyplot as plt\n",
    "import seaborn as sns\n",
    "\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.model_selection import StratifiedKFold\n",
    "\n",
    "from sklearn.metrics import accuracy_score\n",
    "from sklearn.metrics import roc_auc_score\n",
    "from sklearn.metrics import log_loss\n",
    "\n",
    "import xgboost as xgb\n",
    "from xgboost import XGBClassifier\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 数据读取"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(49352, 228)"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#直接读取老师处理好的数据，test数据集没有 y列，这里只读取 train数据集，后续分离部分数据做测试\n",
    "train = pd.read_csv(\"C:/Users/dell/Desktop/ai/three-week/homework/code/data/RentListingInquries_FE_train.csv\")\n",
    "train.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>bathrooms</th>\n",
       "      <th>bedrooms</th>\n",
       "      <th>price</th>\n",
       "      <th>price_bathrooms</th>\n",
       "      <th>price_bedrooms</th>\n",
       "      <th>room_diff</th>\n",
       "      <th>room_num</th>\n",
       "      <th>Year</th>\n",
       "      <th>Month</th>\n",
       "      <th>Day</th>\n",
       "      <th>...</th>\n",
       "      <th>walk</th>\n",
       "      <th>walls</th>\n",
       "      <th>war</th>\n",
       "      <th>washer</th>\n",
       "      <th>water</th>\n",
       "      <th>wheelchair</th>\n",
       "      <th>wifi</th>\n",
       "      <th>windows</th>\n",
       "      <th>work</th>\n",
       "      <th>interest_level</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.5</td>\n",
       "      <td>3</td>\n",
       "      <td>3000</td>\n",
       "      <td>1200.0</td>\n",
       "      <td>750.000000</td>\n",
       "      <td>-1.5</td>\n",
       "      <td>4.5</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>24</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1.0</td>\n",
       "      <td>2</td>\n",
       "      <td>5465</td>\n",
       "      <td>2732.5</td>\n",
       "      <td>1821.666667</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>12</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>2850</td>\n",
       "      <td>1425.0</td>\n",
       "      <td>1425.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>17</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>3275</td>\n",
       "      <td>1637.5</td>\n",
       "      <td>1637.500000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>18</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1.0</td>\n",
       "      <td>4</td>\n",
       "      <td>3350</td>\n",
       "      <td>1675.0</td>\n",
       "      <td>670.000000</td>\n",
       "      <td>-3.0</td>\n",
       "      <td>5.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>28</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 228 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   bathrooms  bedrooms  price  price_bathrooms  price_bedrooms  room_diff  \\\n",
       "0        1.5         3   3000           1200.0      750.000000       -1.5   \n",
       "1        1.0         2   5465           2732.5     1821.666667       -1.0   \n",
       "2        1.0         1   2850           1425.0     1425.000000        0.0   \n",
       "3        1.0         1   3275           1637.5     1637.500000        0.0   \n",
       "4        1.0         4   3350           1675.0      670.000000       -3.0   \n",
       "\n",
       "   room_num  Year  Month  Day       ...        walk  walls  war  washer  \\\n",
       "0       4.5  2016      6   24       ...           0      0    0       0   \n",
       "1       3.0  2016      6   12       ...           0      0    0       0   \n",
       "2       2.0  2016      4   17       ...           0      0    0       0   \n",
       "3       2.0  2016      4   18       ...           0      0    0       0   \n",
       "4       5.0  2016      4   28       ...           0      0    1       0   \n",
       "\n",
       "   water  wheelchair  wifi  windows  work  interest_level  \n",
       "0      0           0     0        0     0               1  \n",
       "1      0           0     0        0     0               2  \n",
       "2      0           0     0        0     0               0  \n",
       "3      0           0     0        0     0               2  \n",
       "4      0           0     0        0     0               2  \n",
       "\n",
       "[5 rows x 228 columns]"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#数据已全部转为数值类型，并剔除了一些特征，合成了一些特征\n",
    "train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0,0.5,'number of interest_level')"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x203db5267b8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.countplot(train.interest_level)\n",
    "plt.ylabel('number of interest_level')\n",
    "#样本数量分布不均衡，后面做训练时加入类别权重或样本权重看下效果"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(29611, 227)"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#分离测试样本及训练样本\n",
    "from sklearn.model_selection import train_test_split\n",
    "y = train['interest_level']\n",
    "X = train.drop('interest_level',axis = 1)\n",
    "X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.4,random_state=4)\n",
    "columns = X_train.columns\n",
    "X_train.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 开始训练模型"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 设置训练参数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "#设置max_depth树的最大深度为4，越大越容易过拟合\n",
    "#设置eta学习率为 0.5\n",
    "#设置silent 为0（0代表有运行信息输出，1代表没有信息输出）\n",
    "#objective设置为'multi:softmax'多分类问题，'binary:logistic'代表二分类逻辑回归问题\n",
    "#多分类问题‘num_class’类别数需要设置\n",
    "param = {'max_depth':4, 'eta':0.5, 'silent':0, 'objective':'multi:softmax','num_class':3}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "3.7816474437713623\n"
     ]
    }
   ],
   "source": [
    "#设置迭代次数，即弱学习器数目\n",
    "num_round = 20\n",
    "#导入time记录运行时长\n",
    "import time\n",
    "start_time = time.time()\n",
    "\n",
    "#xgb矩阵赋值\n",
    "xgtrain = xgb.DMatrix(X_train, label = y_train)\n",
    "#训练\n",
    "xbst = xgb.train(param,xgtrain,num_round)\n",
    "\n",
    "end_time=time.time()\n",
    "print(end_time - start_time)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Train Accuary: 75.01%\n"
     ]
    }
   ],
   "source": [
    "#查看正确率，多分类预测值不是概率，不用对预测值处理。二分类预测值是概率，需要处理\n",
    "train_preds = xbst.predict(xgtrain)\n",
    "#train_predictions = [round(value) for value in train_preds]\n",
    "y_train = xgtrain.get_label()\n",
    "train_accuracy = accuracy_score(y_train,train_preds)\n",
    "#train_accuracy = accuracy_score(y_train,train_predictions)\n",
    "print (\"Train Accuary: %.2f%%\" % (train_accuracy * 100.0))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Train Accuary: 72.52%\n"
     ]
    }
   ],
   "source": [
    "#测试集上试下正确率\n",
    "#xgb矩阵赋值\n",
    "xgtest = xgb.DMatrix(X_test, label = y_test)\n",
    "\n",
    "test_preds = xbst.predict(xgtest)\n",
    "test_accuracy = accuracy_score(y_test,test_preds)\n",
    "\n",
    "print (\"Train Accuary: %.2f%%\" % (test_accuracy * 100.0))\n",
    "#测试集分数比训练集分数低一点，可能存在过拟合"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 开始超参数调优"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 第一步：采用交叉验证得到最佳的弱学习器数目 n_estimators"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "#弱学习器数目先设置为 1000，xgb.cv 会训练最优学习器数目\n",
    "n_estimators = 1000\n",
    "#经验上，选择early_stopping_rounds = 10%*(总迭代次数)\n",
    "early_stopping_rounds = 10\n",
    "cv_result = xgb.cv(param, xgtrain, num_boost_round=n_estimators, folds =5,\n",
    "             metrics='mlogloss', early_stopping_rounds=early_stopping_rounds)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>test-mlogloss-mean</th>\n",
       "      <th>test-mlogloss-std</th>\n",
       "      <th>train-mlogloss-mean</th>\n",
       "      <th>train-mlogloss-std</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.854178</td>\n",
       "      <td>0.000749</td>\n",
       "      <td>0.851487</td>\n",
       "      <td>0.001378</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.755439</td>\n",
       "      <td>0.002531</td>\n",
       "      <td>0.749917</td>\n",
       "      <td>0.001133</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.706236</td>\n",
       "      <td>0.003140</td>\n",
       "      <td>0.698185</td>\n",
       "      <td>0.001686</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.680061</td>\n",
       "      <td>0.002604</td>\n",
       "      <td>0.668768</td>\n",
       "      <td>0.002254</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.663201</td>\n",
       "      <td>0.003686</td>\n",
       "      <td>0.649096</td>\n",
       "      <td>0.001595</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>0.651919</td>\n",
       "      <td>0.003517</td>\n",
       "      <td>0.635380</td>\n",
       "      <td>0.001641</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>0.644224</td>\n",
       "      <td>0.003162</td>\n",
       "      <td>0.625704</td>\n",
       "      <td>0.001359</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>0.637123</td>\n",
       "      <td>0.003773</td>\n",
       "      <td>0.616755</td>\n",
       "      <td>0.001453</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>0.632169</td>\n",
       "      <td>0.003507</td>\n",
       "      <td>0.609351</td>\n",
       "      <td>0.001251</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>0.628367</td>\n",
       "      <td>0.003655</td>\n",
       "      <td>0.603648</td>\n",
       "      <td>0.001317</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>0.625159</td>\n",
       "      <td>0.003495</td>\n",
       "      <td>0.597728</td>\n",
       "      <td>0.001331</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>0.622361</td>\n",
       "      <td>0.003399</td>\n",
       "      <td>0.592611</td>\n",
       "      <td>0.001592</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>0.619954</td>\n",
       "      <td>0.003932</td>\n",
       "      <td>0.588375</td>\n",
       "      <td>0.001265</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>0.617100</td>\n",
       "      <td>0.003413</td>\n",
       "      <td>0.583571</td>\n",
       "      <td>0.001621</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>0.615193</td>\n",
       "      <td>0.003693</td>\n",
       "      <td>0.579410</td>\n",
       "      <td>0.001813</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>0.613746</td>\n",
       "      <td>0.003813</td>\n",
       "      <td>0.575736</td>\n",
       "      <td>0.001471</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>0.612482</td>\n",
       "      <td>0.003695</td>\n",
       "      <td>0.572164</td>\n",
       "      <td>0.001440</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>0.610488</td>\n",
       "      <td>0.003405</td>\n",
       "      <td>0.567976</td>\n",
       "      <td>0.001232</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>0.609787</td>\n",
       "      <td>0.003396</td>\n",
       "      <td>0.564709</td>\n",
       "      <td>0.001639</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>0.609068</td>\n",
       "      <td>0.003504</td>\n",
       "      <td>0.562550</td>\n",
       "      <td>0.001850</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20</th>\n",
       "      <td>0.608012</td>\n",
       "      <td>0.003207</td>\n",
       "      <td>0.560074</td>\n",
       "      <td>0.001942</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>21</th>\n",
       "      <td>0.607140</td>\n",
       "      <td>0.003133</td>\n",
       "      <td>0.557663</td>\n",
       "      <td>0.001916</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>22</th>\n",
       "      <td>0.606331</td>\n",
       "      <td>0.003804</td>\n",
       "      <td>0.555071</td>\n",
       "      <td>0.001948</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23</th>\n",
       "      <td>0.605378</td>\n",
       "      <td>0.003330</td>\n",
       "      <td>0.552027</td>\n",
       "      <td>0.001587</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>24</th>\n",
       "      <td>0.605006</td>\n",
       "      <td>0.003625</td>\n",
       "      <td>0.549513</td>\n",
       "      <td>0.001791</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25</th>\n",
       "      <td>0.604281</td>\n",
       "      <td>0.004024</td>\n",
       "      <td>0.546431</td>\n",
       "      <td>0.001757</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>26</th>\n",
       "      <td>0.603957</td>\n",
       "      <td>0.004262</td>\n",
       "      <td>0.544508</td>\n",
       "      <td>0.002117</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>27</th>\n",
       "      <td>0.603253</td>\n",
       "      <td>0.004198</td>\n",
       "      <td>0.542200</td>\n",
       "      <td>0.001788</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>28</th>\n",
       "      <td>0.603074</td>\n",
       "      <td>0.004405</td>\n",
       "      <td>0.540380</td>\n",
       "      <td>0.001809</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>29</th>\n",
       "      <td>0.602826</td>\n",
       "      <td>0.004453</td>\n",
       "      <td>0.538081</td>\n",
       "      <td>0.001829</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>36</th>\n",
       "      <td>0.600244</td>\n",
       "      <td>0.004632</td>\n",
       "      <td>0.524651</td>\n",
       "      <td>0.001196</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>37</th>\n",
       "      <td>0.600015</td>\n",
       "      <td>0.004398</td>\n",
       "      <td>0.522849</td>\n",
       "      <td>0.001989</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>38</th>\n",
       "      <td>0.599650</td>\n",
       "      <td>0.004302</td>\n",
       "      <td>0.521013</td>\n",
       "      <td>0.002251</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>39</th>\n",
       "      <td>0.599144</td>\n",
       "      <td>0.004390</td>\n",
       "      <td>0.519022</td>\n",
       "      <td>0.002192</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>40</th>\n",
       "      <td>0.598770</td>\n",
       "      <td>0.004268</td>\n",
       "      <td>0.516694</td>\n",
       "      <td>0.002375</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>41</th>\n",
       "      <td>0.598923</td>\n",
       "      <td>0.004222</td>\n",
       "      <td>0.515331</td>\n",
       "      <td>0.002761</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>42</th>\n",
       "      <td>0.598890</td>\n",
       "      <td>0.004047</td>\n",
       "      <td>0.513813</td>\n",
       "      <td>0.002589</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>43</th>\n",
       "      <td>0.598792</td>\n",
       "      <td>0.003962</td>\n",
       "      <td>0.511987</td>\n",
       "      <td>0.002415</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>44</th>\n",
       "      <td>0.598703</td>\n",
       "      <td>0.003762</td>\n",
       "      <td>0.510286</td>\n",
       "      <td>0.002338</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>45</th>\n",
       "      <td>0.598732</td>\n",
       "      <td>0.003911</td>\n",
       "      <td>0.509050</td>\n",
       "      <td>0.002552</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>46</th>\n",
       "      <td>0.598578</td>\n",
       "      <td>0.004003</td>\n",
       "      <td>0.507063</td>\n",
       "      <td>0.003106</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>47</th>\n",
       "      <td>0.598617</td>\n",
       "      <td>0.003785</td>\n",
       "      <td>0.505996</td>\n",
       "      <td>0.003259</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>48</th>\n",
       "      <td>0.598449</td>\n",
       "      <td>0.003870</td>\n",
       "      <td>0.504591</td>\n",
       "      <td>0.002488</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>49</th>\n",
       "      <td>0.598384</td>\n",
       "      <td>0.003634</td>\n",
       "      <td>0.503627</td>\n",
       "      <td>0.002208</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50</th>\n",
       "      <td>0.598257</td>\n",
       "      <td>0.003734</td>\n",
       "      <td>0.502379</td>\n",
       "      <td>0.002076</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>51</th>\n",
       "      <td>0.598266</td>\n",
       "      <td>0.003826</td>\n",
       "      <td>0.500519</td>\n",
       "      <td>0.002029</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>52</th>\n",
       "      <td>0.598294</td>\n",
       "      <td>0.003954</td>\n",
       "      <td>0.498853</td>\n",
       "      <td>0.001922</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>53</th>\n",
       "      <td>0.598197</td>\n",
       "      <td>0.003985</td>\n",
       "      <td>0.497360</td>\n",
       "      <td>0.002307</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>54</th>\n",
       "      <td>0.598007</td>\n",
       "      <td>0.004029</td>\n",
       "      <td>0.495608</td>\n",
       "      <td>0.002764</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>55</th>\n",
       "      <td>0.597949</td>\n",
       "      <td>0.003988</td>\n",
       "      <td>0.494421</td>\n",
       "      <td>0.003045</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>56</th>\n",
       "      <td>0.597597</td>\n",
       "      <td>0.003949</td>\n",
       "      <td>0.492695</td>\n",
       "      <td>0.003051</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>57</th>\n",
       "      <td>0.597601</td>\n",
       "      <td>0.004122</td>\n",
       "      <td>0.490884</td>\n",
       "      <td>0.003025</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>58</th>\n",
       "      <td>0.597910</td>\n",
       "      <td>0.003967</td>\n",
       "      <td>0.489842</td>\n",
       "      <td>0.003039</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>59</th>\n",
       "      <td>0.598084</td>\n",
       "      <td>0.003886</td>\n",
       "      <td>0.488069</td>\n",
       "      <td>0.003687</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>60</th>\n",
       "      <td>0.597890</td>\n",
       "      <td>0.003906</td>\n",
       "      <td>0.486729</td>\n",
       "      <td>0.003024</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>61</th>\n",
       "      <td>0.597663</td>\n",
       "      <td>0.003903</td>\n",
       "      <td>0.484768</td>\n",
       "      <td>0.002902</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>62</th>\n",
       "      <td>0.597480</td>\n",
       "      <td>0.003714</td>\n",
       "      <td>0.483405</td>\n",
       "      <td>0.002379</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>63</th>\n",
       "      <td>0.597529</td>\n",
       "      <td>0.003735</td>\n",
       "      <td>0.482459</td>\n",
       "      <td>0.001928</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>64</th>\n",
       "      <td>0.597359</td>\n",
       "      <td>0.003488</td>\n",
       "      <td>0.481302</td>\n",
       "      <td>0.001866</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>65</th>\n",
       "      <td>0.597211</td>\n",
       "      <td>0.003330</td>\n",
       "      <td>0.480075</td>\n",
       "      <td>0.002205</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>66 rows × 4 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "    test-mlogloss-mean  test-mlogloss-std  train-mlogloss-mean  \\\n",
       "0             0.854178           0.000749             0.851487   \n",
       "1             0.755439           0.002531             0.749917   \n",
       "2             0.706236           0.003140             0.698185   \n",
       "3             0.680061           0.002604             0.668768   \n",
       "4             0.663201           0.003686             0.649096   \n",
       "5             0.651919           0.003517             0.635380   \n",
       "6             0.644224           0.003162             0.625704   \n",
       "7             0.637123           0.003773             0.616755   \n",
       "8             0.632169           0.003507             0.609351   \n",
       "9             0.628367           0.003655             0.603648   \n",
       "10            0.625159           0.003495             0.597728   \n",
       "11            0.622361           0.003399             0.592611   \n",
       "12            0.619954           0.003932             0.588375   \n",
       "13            0.617100           0.003413             0.583571   \n",
       "14            0.615193           0.003693             0.579410   \n",
       "15            0.613746           0.003813             0.575736   \n",
       "16            0.612482           0.003695             0.572164   \n",
       "17            0.610488           0.003405             0.567976   \n",
       "18            0.609787           0.003396             0.564709   \n",
       "19            0.609068           0.003504             0.562550   \n",
       "20            0.608012           0.003207             0.560074   \n",
       "21            0.607140           0.003133             0.557663   \n",
       "22            0.606331           0.003804             0.555071   \n",
       "23            0.605378           0.003330             0.552027   \n",
       "24            0.605006           0.003625             0.549513   \n",
       "25            0.604281           0.004024             0.546431   \n",
       "26            0.603957           0.004262             0.544508   \n",
       "27            0.603253           0.004198             0.542200   \n",
       "28            0.603074           0.004405             0.540380   \n",
       "29            0.602826           0.004453             0.538081   \n",
       "..                 ...                ...                  ...   \n",
       "36            0.600244           0.004632             0.524651   \n",
       "37            0.600015           0.004398             0.522849   \n",
       "38            0.599650           0.004302             0.521013   \n",
       "39            0.599144           0.004390             0.519022   \n",
       "40            0.598770           0.004268             0.516694   \n",
       "41            0.598923           0.004222             0.515331   \n",
       "42            0.598890           0.004047             0.513813   \n",
       "43            0.598792           0.003962             0.511987   \n",
       "44            0.598703           0.003762             0.510286   \n",
       "45            0.598732           0.003911             0.509050   \n",
       "46            0.598578           0.004003             0.507063   \n",
       "47            0.598617           0.003785             0.505996   \n",
       "48            0.598449           0.003870             0.504591   \n",
       "49            0.598384           0.003634             0.503627   \n",
       "50            0.598257           0.003734             0.502379   \n",
       "51            0.598266           0.003826             0.500519   \n",
       "52            0.598294           0.003954             0.498853   \n",
       "53            0.598197           0.003985             0.497360   \n",
       "54            0.598007           0.004029             0.495608   \n",
       "55            0.597949           0.003988             0.494421   \n",
       "56            0.597597           0.003949             0.492695   \n",
       "57            0.597601           0.004122             0.490884   \n",
       "58            0.597910           0.003967             0.489842   \n",
       "59            0.598084           0.003886             0.488069   \n",
       "60            0.597890           0.003906             0.486729   \n",
       "61            0.597663           0.003903             0.484768   \n",
       "62            0.597480           0.003714             0.483405   \n",
       "63            0.597529           0.003735             0.482459   \n",
       "64            0.597359           0.003488             0.481302   \n",
       "65            0.597211           0.003330             0.480075   \n",
       "\n",
       "    train-mlogloss-std  \n",
       "0             0.001378  \n",
       "1             0.001133  \n",
       "2             0.001686  \n",
       "3             0.002254  \n",
       "4             0.001595  \n",
       "5             0.001641  \n",
       "6             0.001359  \n",
       "7             0.001453  \n",
       "8             0.001251  \n",
       "9             0.001317  \n",
       "10            0.001331  \n",
       "11            0.001592  \n",
       "12            0.001265  \n",
       "13            0.001621  \n",
       "14            0.001813  \n",
       "15            0.001471  \n",
       "16            0.001440  \n",
       "17            0.001232  \n",
       "18            0.001639  \n",
       "19            0.001850  \n",
       "20            0.001942  \n",
       "21            0.001916  \n",
       "22            0.001948  \n",
       "23            0.001587  \n",
       "24            0.001791  \n",
       "25            0.001757  \n",
       "26            0.002117  \n",
       "27            0.001788  \n",
       "28            0.001809  \n",
       "29            0.001829  \n",
       "..                 ...  \n",
       "36            0.001196  \n",
       "37            0.001989  \n",
       "38            0.002251  \n",
       "39            0.002192  \n",
       "40            0.002375  \n",
       "41            0.002761  \n",
       "42            0.002589  \n",
       "43            0.002415  \n",
       "44            0.002338  \n",
       "45            0.002552  \n",
       "46            0.003106  \n",
       "47            0.003259  \n",
       "48            0.002488  \n",
       "49            0.002208  \n",
       "50            0.002076  \n",
       "51            0.002029  \n",
       "52            0.001922  \n",
       "53            0.002307  \n",
       "54            0.002764  \n",
       "55            0.003045  \n",
       "56            0.003051  \n",
       "57            0.003025  \n",
       "58            0.003039  \n",
       "59            0.003687  \n",
       "60            0.003024  \n",
       "61            0.002902  \n",
       "62            0.002379  \n",
       "63            0.001928  \n",
       "64            0.001866  \n",
       "65            0.002205  \n",
       "\n",
       "[66 rows x 4 columns]"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cv_result"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best n_estimators: 66\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x203deece0b8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#最佳参数n_estimators\n",
    "n_estimators = cv_result.shape[0]\n",
    "print(\"Best n_estimators:\", n_estimators)\n",
    "\n",
    "#打印下\n",
    "test_means = cv_result['test-mlogloss-mean']\n",
    "test_stds = cv_result['test-mlogloss-std']\n",
    "\n",
    "train_means = cv_result['train-mlogloss-mean']\n",
    "train_stds = cv_result['train-mlogloss-std']\n",
    "\n",
    "x_axis = range(0,cv_result.shape[0])\n",
    "\n",
    "plt.errorbar(x_axis,test_means, yerr = test_stds,label = 'Test')\n",
    "plt.errorbar(x_axis,train_means,yerr = train_stds,label ='Train')\n",
    "plt.title(\"XGBoost n_estimators vs mlogloss\")\n",
    "plt.xlabel('n_estimators')\n",
    "plt.ylabel('mlogloss')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Test Accuracy: 73.35%\n"
     ]
    }
   ],
   "source": [
    "#采用交叉验证得到的最佳参数n_estimators训练模型\n",
    "xbst = xgb.train(param,xgtrain,n_estimators)\n",
    "#试下采用新训练的模型预测效果\n",
    "preds = xbst.predict(xgtest)\n",
    "test_accuracy = accuracy_score(y_test,preds)\n",
    "print (\"Test Accuracy: %.2f%%\" % (test_accuracy * 100.0))\n",
    "#正确率提高一点，可能是树最大深度等其他参数影响导致"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 看下重要特征"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x20380076fd0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#xgboost.plot_importance(booster, ax=None, height=0.2, xlim=None,\n",
    "#                        ylim=None, title='Feature importance', \n",
    "#                        xlabel='F score', ylabel='Features',\n",
    "#                       importance_type='weight', \n",
    "#                        max_num_features=None, grid=True, **kwargs)\n",
    "from xgboost import plot_importance\n",
    "plot_importance(xbst,max_num_features = 20)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 第二步：调整树的参数：树的最大深度 max_depth 和 节点最少特征数 min_child_weight "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'max_depth': range(3, 10, 2), 'min_child_weight': range(1, 6, 2)}"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#采用交叉验证方法验证最佳参数,各类样本不均衡，\n",
    "#StratifiedKFold可以保证每折采样时各类样本按比例采样\n",
    "#StratifiedKFold(y, n_folds=3, shuffle=False, random_state=None) shuffle 指是否打乱样本\n",
    "kflod = StratifiedKFold(n_splits=5, shuffle=True, random_state=3)\n",
    "#最大深度，老师建议3-10，步长为2 先粗调，min_child_weight=1／sqrt(ratio_rare_event)\n",
    "max_depth = range(3,10,2)\n",
    "min_child_weight = range(1,6,2)\n",
    "param_test1 = dict(max_depth=max_depth,min_child_weight=min_child_weight)\n",
    "param_test1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\model_selection\\_search.py:761: DeprecationWarning: The grid_scores_ attribute was deprecated in version 0.18 in favor of the more elaborate cv_results_ attribute. The grid_scores_ attribute will not be available from 0.20\n",
      "  DeprecationWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "([mean: -0.63227, std: 0.00515, params: {'max_depth': 3, 'min_child_weight': 1},\n",
       "  mean: -0.63198, std: 0.00491, params: {'max_depth': 3, 'min_child_weight': 3},\n",
       "  mean: -0.63214, std: 0.00504, params: {'max_depth': 3, 'min_child_weight': 5},\n",
       "  mean: -0.60995, std: 0.00528, params: {'max_depth': 5, 'min_child_weight': 1},\n",
       "  mean: -0.61014, std: 0.00510, params: {'max_depth': 5, 'min_child_weight': 3},\n",
       "  mean: -0.61010, std: 0.00540, params: {'max_depth': 5, 'min_child_weight': 5},\n",
       "  mean: -0.60226, std: 0.00589, params: {'max_depth': 7, 'min_child_weight': 1},\n",
       "  mean: -0.60169, std: 0.00588, params: {'max_depth': 7, 'min_child_weight': 3},\n",
       "  mean: -0.60249, std: 0.00675, params: {'max_depth': 7, 'min_child_weight': 5},\n",
       "  mean: -0.59982, std: 0.00851, params: {'max_depth': 9, 'min_child_weight': 1},\n",
       "  mean: -0.59975, std: 0.00717, params: {'max_depth': 9, 'min_child_weight': 3},\n",
       "  mean: -0.59850, std: 0.00777, params: {'max_depth': 9, 'min_child_weight': 5}],\n",
       " {'max_depth': 9, 'min_child_weight': 5},\n",
       " -0.5984975041062256)"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#XGBClassifier 是xgboost在sklearn中的接口，训练使用的数据不用转换为 矩阵\n",
    "xgb2 = XGBClassifier(\n",
    "       learning_rate = 0.1, #学习率\n",
    "       n_estimators = 66, #使用上面调的最优 学习器数目\n",
    "       max_depth = 5,  #默认为6\n",
    "       min_child_weight = 1, #默认为1\n",
    "       gamma = 0,\n",
    "       subsample = 0.3,\n",
    "       colsample_bytree = 0.8,#每颗随机采样的列数占比\n",
    "       colsample_bylevel = 0.7, # 树的每一级的每一次分裂，对列数的采样的占比 \n",
    "       objective = 'multi:softprob' #最小化的损失函数\n",
    "       )\n",
    "#objective 参数默认reg:linear \n",
    "#          binary:logistic 二分类的逻辑回归，返回预测的概率(不是类别)\n",
    "#          multi:softmax 使用softmax的多分类器，返回预测的类别(不是概率)。还要设置 num_class 类别数量\n",
    "#          multi:softprob 和multi:softmax参数一样，但是返回的是每个数据属于各个类别的概率。 \n",
    "gsearch2 = GridSearchCV(xgb2,param_grid = param_test1,scoring = 'neg_log_loss',n_jobs=-1,cv=kflod)\n",
    "gsearch2.fit(X_train,y_train)\n",
    "\n",
    "gsearch2.grid_scores_, gsearch2.best_params_, gsearch2.best_score_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'mean_fit_time': array([33.73793674, 34.20049562, 34.80681024, 47.45511127, 48.05204968,\n",
       "        47.36439195, 61.60027037, 61.12209926, 61.00957699, 76.24090123,\n",
       "        76.74456468, 68.11419768]),\n",
       " 'mean_score_time': array([0.1375154 , 0.14376459, 0.13751321, 0.18439431, 0.18439379,\n",
       "        0.18751688, 0.24065528, 0.24377255, 0.24377627, 0.29377742,\n",
       "        0.31253033, 0.26564445]),\n",
       " 'mean_test_score': array([-0.63227207, -0.63197768, -0.63213862, -0.60994921, -0.61014449,\n",
       "        -0.6100972 , -0.60225743, -0.60168687, -0.60249228, -0.5998241 ,\n",
       "        -0.59974776, -0.5984975 ]),\n",
       " 'mean_train_score': array([-0.61921533, -0.61933504, -0.61978792, -0.56838914, -0.57121441,\n",
       "        -0.57364091, -0.50244092, -0.51451984, -0.5225412 , -0.42301394,\n",
       "        -0.45265484, -0.47091603]),\n",
       " 'param_max_depth': masked_array(data=[3, 3, 3, 5, 5, 5, 7, 7, 7, 9, 9, 9],\n",
       "              mask=[False, False, False, False, False, False, False, False,\n",
       "                    False, False, False, False],\n",
       "        fill_value='?',\n",
       "             dtype=object),\n",
       " 'param_min_child_weight': masked_array(data=[1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5],\n",
       "              mask=[False, False, False, False, False, False, False, False,\n",
       "                    False, False, False, False],\n",
       "        fill_value='?',\n",
       "             dtype=object),\n",
       " 'params': [{'max_depth': 3, 'min_child_weight': 1},\n",
       "  {'max_depth': 3, 'min_child_weight': 3},\n",
       "  {'max_depth': 3, 'min_child_weight': 5},\n",
       "  {'max_depth': 5, 'min_child_weight': 1},\n",
       "  {'max_depth': 5, 'min_child_weight': 3},\n",
       "  {'max_depth': 5, 'min_child_weight': 5},\n",
       "  {'max_depth': 7, 'min_child_weight': 1},\n",
       "  {'max_depth': 7, 'min_child_weight': 3},\n",
       "  {'max_depth': 7, 'min_child_weight': 5},\n",
       "  {'max_depth': 9, 'min_child_weight': 1},\n",
       "  {'max_depth': 9, 'min_child_weight': 3},\n",
       "  {'max_depth': 9, 'min_child_weight': 5}],\n",
       " 'rank_test_score': array([12, 10, 11,  7,  9,  8,  5,  4,  6,  3,  2,  1]),\n",
       " 'split0_test_score': array([-0.64118237, -0.64039647, -0.64095236, -0.61908174, -0.61859393,\n",
       "        -0.61903195, -0.61354499, -0.61280146, -0.61421681, -0.61427814,\n",
       "        -0.60864292, -0.61109149]),\n",
       " 'split0_train_score': array([-0.61630423, -0.61664179, -0.61729153, -0.5655245 , -0.56808145,\n",
       "        -0.57089252, -0.50063435, -0.51195039, -0.51925052, -0.420662  ,\n",
       "        -0.45304811, -0.47143116]),\n",
       " 'split1_test_score': array([-0.62905154, -0.62830051, -0.62911946, -0.60724551, -0.60650164,\n",
       "        -0.60658106, -0.5976763 , -0.59695995, -0.59584557, -0.58991796,\n",
       "        -0.5881627 , -0.58800039]),\n",
       " 'split1_train_score': array([-0.62106034, -0.62099695, -0.62156487, -0.56989319, -0.57241907,\n",
       "        -0.57442618, -0.5048163 , -0.51737888, -0.52659869, -0.42605867,\n",
       "        -0.45618509, -0.47413491]),\n",
       " 'split2_test_score': array([-0.63459458, -0.63411334, -0.63383667, -0.61225768, -0.61331969,\n",
       "        -0.61321047, -0.60262428, -0.60253624, -0.60568069, -0.60396155,\n",
       "        -0.60556717, -0.6023997 ]),\n",
       " 'split2_train_score': array([-0.61850579, -0.6186589 , -0.61868204, -0.5674786 , -0.57032673,\n",
       "        -0.57261606, -0.50181295, -0.51362853, -0.52284615, -0.42411188,\n",
       "        -0.45441449, -0.46925448]),\n",
       " 'split3_test_score': array([-0.62988055, -0.63049826, -0.63055319, -0.60716119, -0.6075043 ,\n",
       "        -0.60778505, -0.59887229, -0.59837405, -0.59921372, -0.59518338,\n",
       "        -0.59973561, -0.59564654]),\n",
       " 'split3_train_score': array([-0.61973407, -0.62011045, -0.62093377, -0.56958675, -0.57273171,\n",
       "        -0.57503246, -0.50268285, -0.51433665, -0.521419  , -0.42142967,\n",
       "        -0.4510033 , -0.46991307]),\n",
       " 'split4_test_score': array([-0.62664749, -0.62657643, -0.62622768, -0.60399583, -0.60479929,\n",
       "        -0.60387358, -0.59856507, -0.59775847, -0.59750035, -0.59577481,\n",
       "        -0.5966288 , -0.5953459 ]),\n",
       " 'split4_train_score': array([-0.62047222, -0.6202671 , -0.62046737, -0.56946267, -0.5725131 ,\n",
       "        -0.57523734, -0.50225818, -0.51530475, -0.52259162, -0.42280746,\n",
       "        -0.44862323, -0.46984653]),\n",
       " 'std_fit_time': array([0.07127672, 0.12248884, 1.0709257 , 0.10053069, 1.09926454,\n",
       "        0.05502864, 0.23883684, 0.19656821, 0.21136582, 0.97827072,\n",
       "        0.85875247, 2.76624595]),\n",
       " 'std_score_time': array([1.82240390e-02, 1.16939410e-02, 1.16932149e-02, 6.25047694e-03,\n",
       "        6.25092986e-03, 4.67300415e-06, 7.66176466e-03, 7.65983530e-03,\n",
       "        2.11961662e-02, 1.17003924e-02, 4.19281940e-02, 1.97671403e-02]),\n",
       " 'std_test_score': array([0.00514844, 0.00490587, 0.00504283, 0.00527779, 0.00510496,\n",
       "        0.00540336, 0.00589338, 0.00588288, 0.00674563, 0.00851083,\n",
       "        0.00716896, 0.0077736 ]),\n",
       " 'std_train_score': array([0.00168706, 0.00154549, 0.00157398, 0.00166638, 0.00179128,\n",
       "        0.00165563, 0.00137058, 0.00180113, 0.0023936 , 0.00192665,\n",
       "        0.0026342 , 0.00176278])}"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gsearch2.cv_results_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best: -0.598498 using {'max_depth': 9, 'min_child_weight': 5}\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "image/png": "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46CDDgKgvr6exYsXc8MNNzQ1Wa1bt47Pf/7zTXU1NDRQU1PDPvvsw9SpUznyyCNL+Mnk5ysSM8urrSuHrvDII4/wyCOP8IlPpO8rfPDBB6xZs4ZJkyZx0UUXMXfuXE444YRWf423pU+fPkybNg2Aww47jL59+1JdXc1hhx3Ga6+9BqT/gj/vvPNYtmwZlZWVvPTSS03rf//732fs2LFMnDiR2bNn593OE0880ZSAxo0bx7hx4wB4+umnWblyJUcddRQA27dv55Of/GTTeo11zp49m3/7t3/LW/8Xv/hFAA4//PCmuIcPH87ChQubylRWVrJs2TI2bdrEzJkzWb58OWPHji3qOLWHE4mZ9VgRwSWXXMI///M/t1q2dOlSFi5cyCWXXMKxxx7bdDVRSHV1dVMTT0VFBX379m2arq+vB+D6669n33335fnnnyeVStGvX7+m9f/6179SUVHBW2+9RSqVoqIif8NOrqakiGDq1KncddddBddpqymqMe7KysqmuPPZc889mTx5Mg899FBZEombtsysR9ltt914//33ATjuuOP4yU9+wgcffACkT+Lr169n3bp1DBgwgNNOO42LLrqI5557rtW6pXj33XcZNmwYFRUV3H777TQ0NADp5qQzzjiDO++8k0MOOaRFk1S2o48+mp///OcALF++nBdeeAGAiRMn8tRTT7F27VoAtmzZ0uKK55577ml6b7xS6ch+bdiwgU2bNgHp+zWPPvooBx98cLvqKJavSMysRxk8eDBHHXUUY8eOZfr06Xz5y19uOqEOGjSIO+64g7Vr1zJnzhwqKiqorq7mpptuAuDss89m+vTpDBs2rM37JIWce+65nHTSSdx7771MmTKFgQPTT4F997vfZdKkSUyaNImamhqOOOIIjj/+eA455JBWdZxzzjmcccYZjBs3jpqaGiZMmADA0KFDue2225g9ezbbtm0D4KqrrmLMmDEAbNu2jSOPPJJUKtV01TJr1izOOussbrzxRu677768ca9bt46vf/3rLFy4kDfeeIPTTz+dhoYGUqkUp5xyCieccEKHj0lblPlFop1VbW1teIREs+KsWrUq54nRyq9xNNchQ4Z0+bZz/dwlLY2I2kLrlrVpS9I0SaslrZV0cZ4yp0haKWmFpDuTeR+RtFTSsmT+v2SUP1zSi0mdN8r9hZiZdauyNW1JqgTmAVOB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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x20380133b38>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# summarize results\n",
    "print(\"Best: %f using %s\" % (gsearch2.best_score_, gsearch2.best_params_))\n",
    "test_means = gsearch2.cv_results_[ 'mean_test_score' ]\n",
    "test_stds = gsearch2.cv_results_[ 'std_test_score' ]\n",
    "train_means = gsearch2.cv_results_[ 'mean_train_score' ]\n",
    "train_stds = gsearch2.cv_results_[ 'std_train_score' ]\n",
    "\n",
    "pd.DataFrame(gsearch2.cv_results_).to_csv('my_preds_maxdepth_min_child_weights_1.csv')\n",
    "\n",
    "# plot results\n",
    "test_scores = np.array(test_means).reshape(len(max_depth), len(min_child_weight))\n",
    "train_scores = np.array(train_means).reshape(len(max_depth), len(min_child_weight))\n",
    "\n",
    "for i, value in enumerate(max_depth):\n",
    "    plt.plot(min_child_weight, -test_scores[i], label= 'test_max_depth:'   + str(value))\n",
    "\n",
    "plt.legend()\n",
    "plt.xlabel( 'min_child_weight' )                                                                                                      \n",
    "plt.ylabel( 'Log Loss' )\n",
    "plt.savefig('max_depth_vs_min_child_weight_1.png' )"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### max_depth步长调整为1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'max_depth': [8, 9, 10], 'min_child_weight': [4, 5, 6]}"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#在粗调的最优参数，左右各选一作为参数列表\n",
    "max_depth = [8,9,10]\n",
    "min_child_weight = [4,5,6]\n",
    "param_test2 = dict(max_depth = max_depth,min_child_weight=min_child_weight)\n",
    "param_test2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\model_selection\\_search.py:761: DeprecationWarning: The grid_scores_ attribute was deprecated in version 0.18 in favor of the more elaborate cv_results_ attribute. The grid_scores_ attribute will not be available from 0.20\n",
      "  DeprecationWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "([mean: -0.60019, std: 0.00618, params: {'max_depth': 8, 'min_child_weight': 4},\n",
       "  mean: -0.60138, std: 0.00618, params: {'max_depth': 8, 'min_child_weight': 5},\n",
       "  mean: -0.60113, std: 0.00681, params: {'max_depth': 8, 'min_child_weight': 6},\n",
       "  mean: -0.59871, std: 0.00699, params: {'max_depth': 9, 'min_child_weight': 4},\n",
       "  mean: -0.59850, std: 0.00777, params: {'max_depth': 9, 'min_child_weight': 5},\n",
       "  mean: -0.59930, std: 0.00782, params: {'max_depth': 9, 'min_child_weight': 6},\n",
       "  mean: -0.60102, std: 0.00743, params: {'max_depth': 10, 'min_child_weight': 4},\n",
       "  mean: -0.59976, std: 0.00647, params: {'max_depth': 10, 'min_child_weight': 5},\n",
       "  mean: -0.60079, std: 0.00682, params: {'max_depth': 10, 'min_child_weight': 6}],\n",
       " {'max_depth': 9, 'min_child_weight': 5},\n",
       " -0.5984975041062256)"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xgb3 = XGBClassifier(\n",
    "       learning_rate = 0.1, #学习率\n",
    "       n_estimators = 66, #使用上面调的最优 学习器数目\n",
    "       max_depth = 5,  #默认为6\n",
    "       min_child_weight = 1, #默认为1\n",
    "       gamma = 0,\n",
    "       subsample = 0.3, #随机采样训练样本\n",
    "       colsample_bytree = 0.8,#每颗随机采样的列数占比\n",
    "       colsample_bylevel = 0.7, # 树的每一级的每一次分裂，对列数的采样的占比 \n",
    "       objective = 'multi:softprob' ,#最小化的损失函数\n",
    "       scale_pos_weight = 0.5 #类别不均衡时\n",
    "       )\n",
    "\n",
    "gsearch3 = GridSearchCV(xgb3,param_grid = param_test2,scoring = 'neg_log_loss',n_jobs=-1,cv=kflod)\n",
    "gsearch3.fit(X_train,y_train)\n",
    "\n",
    "gsearch3.grid_scores_, gsearch3.best_params_, gsearch3.best_score_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'mean_fit_time': array([75.46103539, 73.41460805, 70.40349169, 77.68466959, 77.89126382,\n",
       "        78.27115321, 82.05889583, 79.77391686, 66.9663518 ]),\n",
       " 'mean_score_time': array([0.31565976, 0.30627813, 0.28127193, 0.29690914, 0.34378548,\n",
       "        0.28753295, 0.31878366, 0.30940828, 0.28720479]),\n",
       " 'mean_test_score': array([-0.60019048, -0.60138039, -0.60112595, -0.5987069 , -0.5984975 ,\n",
       "        -0.59929977, -0.6010202 , -0.59975793, -0.60078652]),\n",
       " 'mean_train_score': array([-0.49066141, -0.49613974, -0.50181678, -0.46305568, -0.47091603,\n",
       "        -0.4787738 , -0.43853525, -0.44971979, -0.4595769 ]),\n",
       " 'param_max_depth': masked_array(data=[8, 8, 8, 9, 9, 9, 10, 10, 10],\n",
       "              mask=[False, False, False, False, False, False, False, False,\n",
       "                    False],\n",
       "        fill_value='?',\n",
       "             dtype=object),\n",
       " 'param_min_child_weight': masked_array(data=[4, 5, 6, 4, 5, 6, 4, 5, 6],\n",
       "              mask=[False, False, False, False, False, False, False, False,\n",
       "                    False],\n",
       "        fill_value='?',\n",
       "             dtype=object),\n",
       " 'params': [{'max_depth': 8, 'min_child_weight': 4},\n",
       "  {'max_depth': 8, 'min_child_weight': 5},\n",
       "  {'max_depth': 8, 'min_child_weight': 6},\n",
       "  {'max_depth': 9, 'min_child_weight': 4},\n",
       "  {'max_depth': 9, 'min_child_weight': 5},\n",
       "  {'max_depth': 9, 'min_child_weight': 6},\n",
       "  {'max_depth': 10, 'min_child_weight': 4},\n",
       "  {'max_depth': 10, 'min_child_weight': 5},\n",
       "  {'max_depth': 10, 'min_child_weight': 6}],\n",
       " 'rank_test_score': array([5, 9, 8, 2, 1, 3, 7, 4, 6]),\n",
       " 'split0_test_score': array([-0.61004668, -0.61191264, -0.61271469, -0.60730419, -0.61109149,\n",
       "        -0.61171722, -0.61275383, -0.61037859, -0.6098504 ]),\n",
       " 'split0_train_score': array([-0.48932043, -0.49396821, -0.50129246, -0.46176752, -0.47143116,\n",
       "        -0.47746193, -0.43530548, -0.44786266, -0.45740626]),\n",
       " 'split1_test_score': array([-0.59614325, -0.59873973, -0.59721478, -0.58877659, -0.58800039,\n",
       "        -0.58961682, -0.5918219 , -0.59140736, -0.59035552]),\n",
       " 'split1_train_score': array([-0.49111391, -0.4975672 , -0.502053  , -0.46711535, -0.47413491,\n",
       "        -0.48190969, -0.43928502, -0.44896702, -0.4588173 ]),\n",
       " 'split2_test_score': array([-0.60360712, -0.60315704, -0.60322061, -0.6058856 , -0.6023997 ,\n",
       "        -0.60364928, -0.6042936 , -0.60186222, -0.60404474]),\n",
       " 'split2_train_score': array([-0.48760768, -0.49340119, -0.49949356, -0.46337455, -0.46925448,\n",
       "        -0.47886017, -0.44053161, -0.45295483, -0.46093808]),\n",
       " 'split3_test_score': array([-0.59897508, -0.59992695, -0.60011773, -0.59696725, -0.59564654,\n",
       "        -0.5983786 , -0.60173638, -0.60010452, -0.60364495]),\n",
       " 'split3_train_score': array([-0.49208454, -0.49588504, -0.50175381, -0.46086878, -0.46991307,\n",
       "        -0.47799143, -0.43716332, -0.44769824, -0.45986597]),\n",
       " 'split4_test_score': array([-0.59217608, -0.59316087, -0.59235706, -0.59459866, -0.5953459 ,\n",
       "        -0.59313316, -0.59449189, -0.59503406, -0.59603537]),\n",
       " 'split4_train_score': array([-0.4931805 , -0.49987707, -0.50449107, -0.46215219, -0.46984653,\n",
       "        -0.47764578, -0.44039082, -0.45111619, -0.46085692]),\n",
       " 'std_fit_time': array([0.54739688, 2.38869608, 0.33024789, 0.27092964, 1.49895235,\n",
       "        0.40888241, 2.26757511, 0.32695375, 0.81338188]),\n",
       " 'std_score_time': array([0.04122704, 0.05728391, 0.01397308, 0.01712569, 0.074616  ,\n",
       "        0.0211966 , 0.03062109, 0.03750428, 0.03034216]),\n",
       " 'std_test_score': array([0.00617939, 0.00617659, 0.00681059, 0.00698559, 0.0077736 ,\n",
       "        0.00782045, 0.00743206, 0.00647198, 0.00681693]),\n",
       " 'std_train_score': array([0.00198491, 0.00237846, 0.00160523, 0.00218361, 0.00176278,\n",
       "        0.00163993, 0.00201516, 0.00202572, 0.00133143])}"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gsearch3.cv_results_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best: -0.598498 using {'max_depth': 9, 'min_child_weight': 5}\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x2038008b3c8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 打印训练不同参数的 logloss\n",
    "print(\"Best: %f using %s\" % (gsearch3.best_score_, gsearch3.best_params_))\n",
    "test_means = gsearch3.cv_results_[ 'mean_test_score' ]\n",
    "test_stds = gsearch3.cv_results_[ 'std_test_score' ]\n",
    "train_means = gsearch3.cv_results_[ 'mean_train_score' ]\n",
    "train_stds = gsearch3.cv_results_[ 'std_train_score' ]\n",
    "\n",
    "pd.DataFrame(gsearch2.cv_results_).to_csv('my_preds_maxdepth_min_child_weights_1.csv')\n",
    "\n",
    "# plot results\n",
    "test_scores2 = np.array(test_means).reshape(len(max_depth), len(min_child_weight))\n",
    "train_scores2 = np.array(train_means).reshape(len(max_depth), len(min_child_weight))\n",
    "\n",
    "for i, value in enumerate(max_depth):\n",
    "    plt.plot(min_child_weight, -test_scores2[i], label= 'test_max_depth:'   + str(value))\n",
    "\n",
    "plt.legend()\n",
    "plt.xlabel( 'min_child_weight' )                                                                                                      \n",
    "plt.ylabel( '-Log Loss' )\n",
    "plt.savefig('max_depth_vs_min_child_weight_2.png' )"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 树最大深度和粗调前结果一样，还是 max_depth =9 min_child_weight=5"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 得到max_depth 和min_child_weight 后重新验证下 弱学习器数目"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [],
   "source": [
    "#定义一个模型训练的函数\n",
    "def modelfit (alg, X_train, y_train, useTrainCV=True, cv_folds=None, early_stopping_rounds=100):\n",
    "    \n",
    "    if useTrainCV:\n",
    "        xgb_param = alg.get_xgb_params()\n",
    "        #多分类问题，要设置num_class\n",
    "        xgb_param['num_class'] = 3\n",
    "        #把数据装入矩阵\n",
    "        xgtrain = xgb.DMatrix(X_train, label = y_train)\n",
    "        \n",
    "        cvresult = xgb.cv(xgb_param, xgtrain, num_boost_round=alg.get_params()['n_estimators'], folds =cv_folds,\n",
    "                         metrics='mlogloss', early_stopping_rounds=early_stopping_rounds)\n",
    "        \n",
    "        n_estimators = cvresult.shape[0]\n",
    "        alg.set_params(n_estimators = n_estimators)\n",
    "        \n",
    "        print (cvresult)\n",
    "        cvresult.to_csv('my_preds.csv', index_label = 'n_estimators')\n",
    "        \n",
    "        # plot\n",
    "        test_means = cvresult['test-mlogloss-mean']\n",
    "        test_stds = cvresult['test-mlogloss-std'] \n",
    "        \n",
    "        train_means = cvresult['train-mlogloss-mean']\n",
    "        train_stds = cvresult['train-mlogloss-std'] \n",
    "\n",
    "        x_axis = range(0, n_estimators)\n",
    "        plt.errorbar(x_axis, test_means, yerr=test_stds ,label='Test')\n",
    "        plt.errorbar(x_axis, train_means, yerr=train_stds ,label='Train')\n",
    "        plt.title(\"XGBoost n_estimators vs Log Loss\")\n",
    "        plt.xlabel( 'n_estimators' )\n",
    "        plt.ylabel( 'Log Loss' )\n",
    "        plt.savefig( 'n_estimators4_2_3_699.png' )\n",
    "    \n",
    "    #Fit the algorithm on the data\n",
    "    alg.fit(X_train, y_train, eval_metric='mlogloss')\n",
    "        \n",
    "    #Predict training set:\n",
    "    train_predprob = alg.predict_proba(X_train)\n",
    "    logloss = log_loss(y_train, train_predprob)\n",
    "\n",
    "        \n",
    "    #Print model report:\n",
    "    print (\"logloss of train :\" )\n",
    "    print (logloss)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "    test-mlogloss-mean  test-mlogloss-std  train-mlogloss-mean  \\\n",
      "0             1.038479           0.000490             1.034914   \n",
      "1             0.987857           0.000300             0.980524   \n",
      "2             0.943728           0.000588             0.932717   \n",
      "3             0.906331           0.000722             0.891943   \n",
      "4             0.873523           0.000598             0.855666   \n",
      "5             0.844769           0.001154             0.823825   \n",
      "6             0.819423           0.001445             0.795824   \n",
      "7             0.797955           0.001775             0.771500   \n",
      "8             0.778325           0.002471             0.749059   \n",
      "9             0.760875           0.002334             0.728895   \n",
      "10            0.746130           0.002372             0.711412   \n",
      "11            0.732443           0.002188             0.695199   \n",
      "12            0.720564           0.002380             0.680706   \n",
      "13            0.709981           0.002223             0.667686   \n",
      "14            0.700329           0.002131             0.655469   \n",
      "15            0.691726           0.001789             0.644245   \n",
      "16            0.684010           0.001808             0.634276   \n",
      "17            0.677050           0.001373             0.625016   \n",
      "18            0.670915           0.001475             0.616537   \n",
      "19            0.665360           0.001622             0.608681   \n",
      "20            0.660295           0.001356             0.601461   \n",
      "21            0.655807           0.001461             0.594549   \n",
      "22            0.651675           0.001657             0.588229   \n",
      "23            0.647807           0.002080             0.582191   \n",
      "24            0.644381           0.001981             0.576732   \n",
      "25            0.641142           0.001971             0.571679   \n",
      "26            0.638243           0.002079             0.566729   \n",
      "27            0.635641           0.001850             0.562035   \n",
      "28            0.633205           0.001672             0.557044   \n",
      "29            0.630786           0.001604             0.553192   \n",
      "..                 ...                ...                  ...   \n",
      "36            0.619287           0.001635             0.529337   \n",
      "37            0.618282           0.001695             0.526501   \n",
      "38            0.617040           0.001622             0.523902   \n",
      "39            0.615984           0.001634             0.520720   \n",
      "40            0.614835           0.001830             0.517906   \n",
      "41            0.613927           0.001845             0.515262   \n",
      "42            0.612625           0.001935             0.512482   \n",
      "43            0.611994           0.001899             0.509959   \n",
      "44            0.611200           0.001866             0.507641   \n",
      "45            0.610608           0.001758             0.505057   \n",
      "46            0.609799           0.001397             0.502624   \n",
      "47            0.609125           0.001157             0.500658   \n",
      "48            0.608719           0.001077             0.498589   \n",
      "49            0.608410           0.001077             0.496672   \n",
      "50            0.607842           0.001101             0.494549   \n",
      "51            0.607560           0.001098             0.492543   \n",
      "52            0.607092           0.001154             0.490212   \n",
      "53            0.606892           0.001213             0.488426   \n",
      "54            0.606349           0.001135             0.486441   \n",
      "55            0.605852           0.000954             0.484346   \n",
      "56            0.605453           0.000927             0.482412   \n",
      "57            0.605021           0.001284             0.480481   \n",
      "58            0.604709           0.001353             0.478784   \n",
      "59            0.604438           0.001296             0.477053   \n",
      "60            0.604157           0.001128             0.474978   \n",
      "61            0.603968           0.001276             0.473048   \n",
      "62            0.603558           0.001373             0.471531   \n",
      "63            0.603176           0.001404             0.469403   \n",
      "64            0.602826           0.001367             0.467530   \n",
      "65            0.602904           0.001300             0.465769   \n",
      "\n",
      "    train-mlogloss-std  \n",
      "0             0.000299  \n",
      "1             0.000876  \n",
      "2             0.001048  \n",
      "3             0.001522  \n",
      "4             0.001967  \n",
      "5             0.001757  \n",
      "6             0.001520  \n",
      "7             0.001649  \n",
      "8             0.000971  \n",
      "9             0.001160  \n",
      "10            0.001080  \n",
      "11            0.001393  \n",
      "12            0.001354  \n",
      "13            0.001636  \n",
      "14            0.001482  \n",
      "15            0.002003  \n",
      "16            0.001786  \n",
      "17            0.001740  \n",
      "18            0.001738  \n",
      "19            0.001712  \n",
      "20            0.001874  \n",
      "21            0.001444  \n",
      "22            0.001140  \n",
      "23            0.001324  \n",
      "24            0.001269  \n",
      "25            0.001674  \n",
      "26            0.001915  \n",
      "27            0.002106  \n",
      "28            0.002084  \n",
      "29            0.001948  \n",
      "..                 ...  \n",
      "36            0.002866  \n",
      "37            0.002936  \n",
      "38            0.002943  \n",
      "39            0.002443  \n",
      "40            0.002099  \n",
      "41            0.002135  \n",
      "42            0.002230  \n",
      "43            0.002229  \n",
      "44            0.002229  \n",
      "45            0.002061  \n",
      "46            0.001494  \n",
      "47            0.001707  \n",
      "48            0.001872  \n",
      "49            0.001832  \n",
      "50            0.001972  \n",
      "51            0.001926  \n",
      "52            0.001955  \n",
      "53            0.002005  \n",
      "54            0.001950  \n",
      "55            0.002270  \n",
      "56            0.002422  \n",
      "57            0.002410  \n",
      "58            0.002450  \n",
      "59            0.002296  \n",
      "60            0.002728  \n",
      "61            0.002646  \n",
      "62            0.002721  \n",
      "63            0.002563  \n",
      "64            0.002976  \n",
      "65            0.002843  \n",
      "\n",
      "[66 rows x 4 columns]\n",
      "logloss of train :\n",
      "0.4796155443299177\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x2038010eef0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#调整max_depth和min_child_weight之后再次调整n_estimators(9,5)\n",
    "xgb4 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=66,  \n",
    "        max_depth=9,\n",
    "        min_child_weight=5,\n",
    "        gamma=0,\n",
    "        subsample=0.3,\n",
    "        colsample_bytree=0.8,\n",
    "        colsample_bylevel=0.7,\n",
    "        objective= 'multi:softprob',\n",
    "        seed=3)\n",
    "\n",
    "modelfit(xgb4, X_train, y_train, cv_folds = kflod)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:1: FutureWarning: from_csv is deprecated. Please use read_csv(...) instead. Note that some of the default arguments are different, so please refer to the documentation for from_csv when changing your function calls\n",
      "  \"\"\"Entry point for launching an IPython kernel.\n"
     ]
    },
    {
     "data": {
      "image/png": "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LSIi7aVhiiIiItKlmNl9wEK84bq98YYQnoHXOywi0mUojImIyEHnT4yyJ00u4v5aInsRjTfjaTbe8MJlwFedc08F2ioRkX2kYYoiInJQmVkusH4v1e5yzt150BsjIiLSiahnTEREDrateDPI7a2OiIhIj6KeMRERERERkQDops8iIiIiIiIB0DDF/WRmBgzAu4+LiIiIiIj0bKnAVrcPQw8VxvbfAGBL0I0QEREREZFOYxCQ197KCmP7rwJg8+bNpKWlBd0WEREREREJSHl5OYMHD4Z9HDWnMHaA0tLSFMZERERERGSfaQIPERERERGRACiMiYiIiIiIBEBhTEREREREJAAKYyIiIiIiIgFQGBMREREREQmAwpiIiIiIiEgAFMZEREREREQCoDAmIiIiIiISAIUxERERERGRACiMiYiIiIiIBEBhTEREREREJAAKYyIiIiIiIgFQGBMREREREQmAwpiIiIiIiEgAFMZEREREREQCoDAmIiIiIiISAIUxERERERGRACiMiYiIiIiIBEBhTEREREREJAAKYyIiIiIiIgFQGBMREREREQmAwpiIiIiIiEgAFMZEREREREQCoDAmIiIiIiISAIUxERERERGRACiMiYiIiIiIBEBhTEREREREJAAKYyIiIiIiIgFQGBMREREREQmAwpiIiIiIiEgAFMZEREREREQCoDDWxVWHGsi9bSq5t02lOtQQdHNERERERKSdFMZEREREREQCoDAmIiIiIiISAIWxbsQ5F3QTRERERESknRTGuri80prw4z+9u1qBTERERESki1AY6+IGZiSGHz8yaz33vLlCgUxEREREpAtQGOtm/jZjHb95fbkCmYiIiIhIJ6cw1o3875eOBLwesl9NVSATEREREenMFMa6kcsn5PDrC0cD8Njs9fziv8sUyEREREREOinTH+v7x8zSgLKysjLS0tKCbk4Lz8zfxO0vLgbg6klDuPO8ozCzgFslIiIiItI9lZeXk56eDpDunCtv73bqGeuGLp+Qw71fORoz+OecjdzxylKamhS6RUREREQ6E4WxburS43P47VeOwQyenLuRn72yRIFMRERERKQTURjrxi4+bjC/v2gMZvD0vE38z8uLFchERERERDoJhbFu7ivHDuK+S8YQZfDM/M3c/qICmYiIiIhIZ6Aw1gNcOG4Qf7x0LFEGzy3YzK0v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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x2038033c898>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "cvresult = pd.DataFrame.from_csv('my_preds.csv')\n",
    "\n",
    "cvresult = cvresult.iloc[20:]\n",
    "# plot\n",
    "test_means = cvresult['test-mlogloss-mean']\n",
    "test_stds = cvresult['test-mlogloss-std'] \n",
    "        \n",
    "train_means = cvresult['train-mlogloss-mean']\n",
    "train_stds = cvresult['train-mlogloss-std'] \n",
    "\n",
    "x_axis = range(20,cvresult.shape[0]+20)\n",
    "        \n",
    "fig = plt.figure(figsize=(10, 10), dpi=100)\n",
    "plt.errorbar(x_axis, test_means, yerr=test_stds ,label='Test')\n",
    "plt.errorbar(x_axis, train_means, yerr=train_stds ,label='Train')\n",
    "plt.title(\"XGBoost n_estimators vs Log Loss\")\n",
    "plt.xlabel( 'n_estimators' )\n",
    "plt.ylabel( 'Log Loss' )\n",
    "plt.savefig( 'n_estimators_detail4_2_3_699.png' )\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 第四步：调整树的参数：subsample 随机采样训练样本 和 colsample_bytree 生成树时进行的列采样 "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'colsample_bytree': [0.6, 0.7, 0.8, 0.9],\n",
       " 'subsample': [0.3, 0.4, 0.5, 0.6, 0.7, 0.8]}"
      ]
     },
     "execution_count": 44,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#设置参数列表，这两个参数是百分比，参数值小于1\n",
    "subsample = [i/10.0 for i in range(3,9)]\n",
    "colsample_bytree = [i/10.0 for i in range(6,10)]\n",
    "param_test3 = dict(subsample=subsample, colsample_bytree=colsample_bytree)\n",
    "param_test3\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\model_selection\\_search.py:761: DeprecationWarning: The grid_scores_ attribute was deprecated in version 0.18 in favor of the more elaborate cv_results_ attribute. The grid_scores_ attribute will not be available from 0.20\n",
      "  DeprecationWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "([mean: -0.60226, std: 0.00620, params: {'colsample_bytree': 0.6, 'subsample': 0.3},\n",
       "  mean: -0.59816, std: 0.00600, params: {'colsample_bytree': 0.6, 'subsample': 0.4},\n",
       "  mean: -0.59688, std: 0.00605, params: {'colsample_bytree': 0.6, 'subsample': 0.5},\n",
       "  mean: -0.59536, std: 0.00516, params: {'colsample_bytree': 0.6, 'subsample': 0.6},\n",
       "  mean: -0.59412, std: 0.00538, params: {'colsample_bytree': 0.6, 'subsample': 0.7},\n",
       "  mean: -0.59241, std: 0.00501, params: {'colsample_bytree': 0.6, 'subsample': 0.8},\n",
       "  mean: -0.60071, std: 0.00678, params: {'colsample_bytree': 0.7, 'subsample': 0.3},\n",
       "  mean: -0.59672, std: 0.00608, params: {'colsample_bytree': 0.7, 'subsample': 0.4},\n",
       "  mean: -0.59526, std: 0.00535, params: {'colsample_bytree': 0.7, 'subsample': 0.5},\n",
       "  mean: -0.59395, std: 0.00454, params: {'colsample_bytree': 0.7, 'subsample': 0.6},\n",
       "  mean: -0.59311, std: 0.00556, params: {'colsample_bytree': 0.7, 'subsample': 0.7},\n",
       "  mean: -0.59215, std: 0.00618, params: {'colsample_bytree': 0.7, 'subsample': 0.8},\n",
       "  mean: -0.60128, std: 0.00877, params: {'colsample_bytree': 0.8, 'subsample': 0.3},\n",
       "  mean: -0.59654, std: 0.00573, params: {'colsample_bytree': 0.8, 'subsample': 0.4},\n",
       "  mean: -0.59366, std: 0.00675, params: {'colsample_bytree': 0.8, 'subsample': 0.5},\n",
       "  mean: -0.59216, std: 0.00624, params: {'colsample_bytree': 0.8, 'subsample': 0.6},\n",
       "  mean: -0.59196, std: 0.00601, params: {'colsample_bytree': 0.8, 'subsample': 0.7},\n",
       "  mean: -0.59218, std: 0.00614, params: {'colsample_bytree': 0.8, 'subsample': 0.8},\n",
       "  mean: -0.59962, std: 0.00764, params: {'colsample_bytree': 0.9, 'subsample': 0.3},\n",
       "  mean: -0.59599, std: 0.00698, params: {'colsample_bytree': 0.9, 'subsample': 0.4},\n",
       "  mean: -0.59501, std: 0.00634, params: {'colsample_bytree': 0.9, 'subsample': 0.5},\n",
       "  mean: -0.59236, std: 0.00724, params: {'colsample_bytree': 0.9, 'subsample': 0.6},\n",
       "  mean: -0.59123, std: 0.00610, params: {'colsample_bytree': 0.9, 'subsample': 0.7},\n",
       "  mean: -0.59154, std: 0.00554, params: {'colsample_bytree': 0.9, 'subsample': 0.8}],\n",
       " {'colsample_bytree': 0.9, 'subsample': 0.7},\n",
       " -0.591228108140826)"
      ]
     },
     "execution_count": 46,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xgb5 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=66,  #第二轮参数调整得到的n_estimators最优值\n",
    "        max_depth=9,\n",
    "        min_child_weight=5,\n",
    "        gamma=0,\n",
    "        subsample=0.3,\n",
    "        colsample_bytree=0.8,\n",
    "        colsample_bylevel = 0.7,\n",
    "        objective= 'multi:softprob',\n",
    "        seed=3) #随机种子\n",
    "\n",
    "\n",
    "gsearch4 = GridSearchCV(xgb5, param_grid = param_test3, scoring='neg_log_loss',n_jobs=-1, cv=kflod)\n",
    "gsearch4.fit(X_train , y_train)\n",
    "\n",
    "gsearch4.grid_scores_, gsearch4.best_params_,     gsearch4.best_score_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'mean_fit_time': array([ 67.44279051,  75.89448519,  78.12265038,  79.09214296,\n",
       "         78.69226255,  78.78490572,  71.5448565 ,  82.02403889,\n",
       "         85.75761065,  88.56694646,  89.11680174,  90.90159702,\n",
       "         80.47303886,  89.12882938,  94.13160505,  94.6492157 ,\n",
       "         98.00390315,  98.82065935,  86.29182825,  96.15591888,\n",
       "        103.25155387, 105.7549438 , 104.30166016,  99.58108506]),\n",
       " 'mean_score_time': array([0.36612458, 0.2875339 , 0.31565566, 0.32503467, 0.30940857,\n",
       "        0.28440833, 0.2812789 , 0.34377732, 0.29065619, 0.29322062,\n",
       "        0.29495587, 0.33468976, 0.30002704, 0.27190266, 0.27674384,\n",
       "        0.27190561, 0.32503443, 0.31253009, 0.2625258 , 0.27190351,\n",
       "        0.27503357, 0.28127699, 0.28440681, 0.24064474]),\n",
       " 'mean_test_score': array([-0.60226396, -0.59815652, -0.59687791, -0.59536081, -0.59412453,\n",
       "        -0.59241215, -0.60071386, -0.59671581, -0.59525977, -0.59395311,\n",
       "        -0.59310637, -0.59215468, -0.60128091, -0.59653587, -0.59365767,\n",
       "        -0.59215606, -0.59195851, -0.59217792, -0.59962217, -0.59599299,\n",
       "        -0.59501013, -0.59236481, -0.59122811, -0.59153842]),\n",
       " 'mean_train_score': array([-0.48081665, -0.4630201 , -0.45057037, -0.43900242, -0.43036641,\n",
       "        -0.42455078, -0.47515566, -0.45821988, -0.44601108, -0.43417546,\n",
       "        -0.42642265, -0.41912468, -0.47056229, -0.45339369, -0.43981973,\n",
       "        -0.43047518, -0.42200245, -0.41576432, -0.4684598 , -0.45167814,\n",
       "        -0.43813339, -0.4269941 , -0.41919113, -0.41348792]),\n",
       " 'param_colsample_bytree': masked_array(data=[0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.7, 0.7, 0.7, 0.7, 0.7,\n",
       "                    0.7, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.9, 0.9, 0.9, 0.9,\n",
       "                    0.9, 0.9],\n",
       "              mask=[False, False, False, False, False, False, False, False,\n",
       "                    False, False, False, False, False, False, False, False,\n",
       "                    False, False, False, False, False, False, False, False],\n",
       "        fill_value='?',\n",
       "             dtype=object),\n",
       " 'param_subsample': masked_array(data=[0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.3, 0.4, 0.5, 0.6, 0.7,\n",
       "                    0.8, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.3, 0.4, 0.5, 0.6,\n",
       "                    0.7, 0.8],\n",
       "              mask=[False, False, False, False, False, False, False, False,\n",
       "                    False, False, False, False, False, False, False, False,\n",
       "                    False, False, False, False, False, False, False, False],\n",
       "        fill_value='?',\n",
       "             dtype=object),\n",
       " 'params': [{'colsample_bytree': 0.6, 'subsample': 0.3},\n",
       "  {'colsample_bytree': 0.6, 'subsample': 0.4},\n",
       "  {'colsample_bytree': 0.6, 'subsample': 0.5},\n",
       "  {'colsample_bytree': 0.6, 'subsample': 0.6},\n",
       "  {'colsample_bytree': 0.6, 'subsample': 0.7},\n",
       "  {'colsample_bytree': 0.6, 'subsample': 0.8},\n",
       "  {'colsample_bytree': 0.7, 'subsample': 0.3},\n",
       "  {'colsample_bytree': 0.7, 'subsample': 0.4},\n",
       "  {'colsample_bytree': 0.7, 'subsample': 0.5},\n",
       "  {'colsample_bytree': 0.7, 'subsample': 0.6},\n",
       "  {'colsample_bytree': 0.7, 'subsample': 0.7},\n",
       "  {'colsample_bytree': 0.7, 'subsample': 0.8},\n",
       "  {'colsample_bytree': 0.8, 'subsample': 0.3},\n",
       "  {'colsample_bytree': 0.8, 'subsample': 0.4},\n",
       "  {'colsample_bytree': 0.8, 'subsample': 0.5},\n",
       "  {'colsample_bytree': 0.8, 'subsample': 0.6},\n",
       "  {'colsample_bytree': 0.8, 'subsample': 0.7},\n",
       "  {'colsample_bytree': 0.8, 'subsample': 0.8},\n",
       "  {'colsample_bytree': 0.9, 'subsample': 0.3},\n",
       "  {'colsample_bytree': 0.9, 'subsample': 0.4},\n",
       "  {'colsample_bytree': 0.9, 'subsample': 0.5},\n",
       "  {'colsample_bytree': 0.9, 'subsample': 0.6},\n",
       "  {'colsample_bytree': 0.9, 'subsample': 0.7},\n",
       "  {'colsample_bytree': 0.9, 'subsample': 0.8}],\n",
       " 'rank_test_score': array([24, 20, 19, 15, 12,  8, 22, 18, 14, 11,  9,  4, 23, 17, 10,  5,  3,\n",
       "         6, 21, 16, 13,  7,  1,  2]),\n",
       " 'split0_test_score': array([-0.61370365, -0.60906787, -0.60686345, -0.60409784, -0.60341062,\n",
       "        -0.6009764 , -0.6117177 , -0.60820179, -0.60326752, -0.60122654,\n",
       "        -0.60262931, -0.60154563, -0.61433619, -0.60426073, -0.60492507,\n",
       "        -0.6017586 , -0.60111878, -0.60172964, -0.61349443, -0.6080209 ,\n",
       "        -0.60551065, -0.60467047, -0.60180739, -0.60022726]),\n",
       " 'split0_train_score': array([-0.47863305, -0.46236983, -0.44837374, -0.4387967 , -0.42609623,\n",
       "        -0.42103528, -0.47241826, -0.45576991, -0.44126612, -0.42907926,\n",
       "        -0.42397654, -0.41534908, -0.46930411, -0.45215101, -0.43440751,\n",
       "        -0.42991026, -0.42072785, -0.41449306, -0.46685772, -0.44789532,\n",
       "        -0.43366806, -0.4224207 , -0.41242819, -0.40870071]),\n",
       " 'split1_test_score': array([-0.59561484, -0.59329179, -0.59008523, -0.59096228, -0.58957753,\n",
       "        -0.58914147, -0.59561938, -0.59299961, -0.59150038, -0.58995856,\n",
       "        -0.58871749, -0.58751415, -0.59223448, -0.59123133, -0.58706403,\n",
       "        -0.58500947, -0.58632052, -0.58585506, -0.5945975 , -0.58829393,\n",
       "        -0.58952099, -0.58664139, -0.58556595, -0.58485374]),\n",
       " 'split1_train_score': array([-0.48454345, -0.46627976, -0.45313795, -0.44355118, -0.43456876,\n",
       "        -0.428828  , -0.47514902, -0.46110329, -0.44939186, -0.43593285,\n",
       "        -0.43008128, -0.42076863, -0.47125821, -0.45296558, -0.44331326,\n",
       "        -0.43329442, -0.42369906, -0.41475848, -0.47213685, -0.45993049,\n",
       "        -0.44576346, -0.43275526, -0.42874553, -0.41770375]),\n",
       " 'split2_test_score': array([-0.60222507, -0.59929492, -0.59935248, -0.59737916, -0.59662479,\n",
       "        -0.59500983, -0.6052781 , -0.59759982, -0.59965886, -0.59736857,\n",
       "        -0.5962797 , -0.59740177, -0.60793635, -0.60243639, -0.59766279,\n",
       "        -0.59618864, -0.59701369, -0.5963289 , -0.60131736, -0.59804988,\n",
       "        -0.59858102, -0.59640957, -0.59416668, -0.59537981]),\n",
       " 'split2_train_score': array([-0.47992884, -0.46110441, -0.4501156 , -0.43893098, -0.4304349 ,\n",
       "        -0.42505592, -0.47745477, -0.46019212, -0.44898547, -0.43429927,\n",
       "        -0.42514286, -0.42145642, -0.47121427, -0.45472623, -0.44004954,\n",
       "        -0.43064969, -0.42464807, -0.418561  , -0.46627024, -0.44901719,\n",
       "        -0.43742527, -0.42784996, -0.41903772, -0.41511934]),\n",
       " 'split3_test_score': array([-0.60156984, -0.59682829, -0.59675651, -0.59476266, -0.59213997,\n",
       "        -0.58981602, -0.59733087, -0.59186274, -0.59297375, -0.59099631,\n",
       "        -0.58874812, -0.58852579, -0.59989804, -0.59422434, -0.59067572,\n",
       "        -0.5915811 , -0.58885484, -0.59102087, -0.59712621, -0.59551338,\n",
       "        -0.59304006, -0.58865876, -0.58843183, -0.58948571]),\n",
       " 'split3_train_score': array([-0.4800541 , -0.46386098, -0.4500412 , -0.43465396, -0.42969975,\n",
       "        -0.42222894, -0.47785109, -0.45580994, -0.44525371, -0.43501088,\n",
       "        -0.42580212, -0.41736778, -0.47008036, -0.45244041, -0.44141953,\n",
       "        -0.42682689, -0.41883046, -0.41419409, -0.46871533, -0.45220886,\n",
       "        -0.43638081, -0.42617513, -0.41497419, -0.41033041]),\n",
       " 'split4_test_score': array([-0.59820288, -0.59229568, -0.59132869, -0.58959882, -0.58886615,\n",
       "        -0.58711333, -0.59361863, -0.59291035, -0.5888948 , -0.59021266,\n",
       "        -0.58915333, -0.58578198, -0.59199483, -0.59052347, -0.58795657,\n",
       "        -0.58623937, -0.58648112, -0.58595174, -0.59156974, -0.59008302,\n",
       "        -0.58839387, -0.58543886, -0.58616475, -0.58774281]),\n",
       " 'split4_train_score': array([-0.48092381, -0.4614855 , -0.45118336, -0.43907929, -0.4310324 ,\n",
       "        -0.42560576, -0.47290516, -0.45822414, -0.44515826, -0.43655504,\n",
       "        -0.42711046, -0.42068148, -0.47095449, -0.45468522, -0.4399088 ,\n",
       "        -0.43169462, -0.42210681, -0.41681498, -0.46831885, -0.44933883,\n",
       "        -0.43742934, -0.42576946, -0.42077001, -0.41558538]),\n",
       " 'std_fit_time': array([1.06548977, 2.6373933 , 0.19177566, 0.53399912, 0.57939644,\n",
       "        0.46898529, 1.55307805, 0.51983381, 0.63219856, 0.75934198,\n",
       "        0.14398491, 1.65285916, 0.61487018, 0.26943306, 1.50953666,\n",
       "        0.73412893, 0.42858565, 1.47270941, 0.55153406, 0.99725525,\n",
       "        0.44612349, 0.61264943, 0.53857752, 3.95089273]),\n",
       " 'std_score_time': array([8.23490438e-02, 1.59339043e-02, 4.46365889e-02, 8.11378130e-02,\n",
       "        5.71139882e-02, 1.82169089e-02, 9.88196692e-03, 9.05747740e-02,\n",
       "        7.65481131e-03, 1.46553452e-02, 1.36454467e-02, 4.50158074e-02,\n",
       "        3.47938729e-02, 7.65631051e-03, 6.18166769e-03, 7.65360490e-03,\n",
       "        3.87842724e-02, 3.27809380e-02, 6.25003177e-03, 1.25004650e-02,\n",
       "        7.65851312e-03, 5.96218084e-06, 6.25162157e-03, 1.59443698e-02]),\n",
       " 'std_test_score': array([0.00619831, 0.00600275, 0.00604671, 0.00516398, 0.00538088,\n",
       "        0.0050125 , 0.00677768, 0.00607598, 0.00535461, 0.0045447 ,\n",
       "        0.0055617 , 0.0061815 , 0.00877223, 0.00572944, 0.00675132,\n",
       "        0.00624355, 0.00601511, 0.00614122, 0.00763779, 0.00697681,\n",
       "        0.00633761, 0.00724276, 0.00610089, 0.00554224]),\n",
       " 'std_train_score': array([0.00200191, 0.00188574, 0.00156718, 0.00281616, 0.00271245,\n",
       "        0.00273541, 0.00224095, 0.00219153, 0.00296959, 0.00266216,\n",
       "        0.00209117, 0.00236242, 0.00075874, 0.00110272, 0.00297042,\n",
       "        0.00214917, 0.00207725, 0.00167444, 0.00204776, 0.00436453,\n",
       "        0.00405526, 0.00337668, 0.00560933, 0.00339769])}"
      ]
     },
     "execution_count": 47,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gsearch4.cv_results_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best: -0.591228 using {'colsample_bytree': 0.9, 'subsample': 0.7}\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZIAAAEKCAYAAAA4t9PUAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvNQv5yAAAIABJREFUeJzs3Xdc1dX/wPHXYYsoiDgQRNEcKVvcKzVXjnKkaa5Sy9K++vuWqZlpfrMsrSyzrMyRI3OUDS01NXCDA9yJggNERRAVZN/374+LhMqeKuf5eNzHo3vvOedz7g15c8bnvJWIoGmapmkFZVLaHdA0TdMebjqQaJqmaYWiA4mmaZpWKDqQaJqmaYWiA4mmaZpWKDqQaJqmaYWiA4mmaZpWKDqQaJqmaYWiA4mmaZpWKGal3YGS4ODgILVr1y7tbmiapj1UDh48eE1EquRWrkwEktq1a3PgwIHS7oamadpDRSl1Pi/l9NSWpmmaVig6kGiapmmFogOJpmmaVihlYo1E0x4EKSkphIeHk5iYWNpd0bS7WFlZ4ezsjLm5eYHq60CiaSUkPDycChUqULt2bZRSpd0dTQNARIiOjiY8PBxXV9cCtaGntjSthCQmJlK5cmUdRLQHilKKypUrF2qkrAOJppUgHUS0B1Fhfy51IMnB9lNXWBN4sbS7oWma9kDTayTZEBFW7ruA3+koatpb07Ju5dLukqZp2gOpWEckSqluSql/lFJnlFKTsykzQCl1Qil1XCm1KtPrw5VSIemP4emvWSulNiqlTqWXn12MfefT57yo7VCeV1Ye5EL07eK6lKaVmNjYWL788ssC1Z03bx63bxfdv4OlS5cybty4Imsvr/7++2969uyZ73r57e+5c+dYtWpV7gULKCYmhs6dO1OvXj06d+7M9evXsyx34cIFunTpwuOPP06jRo04d+5ckfel2AKJUsoUWAB0BxoBg5RSje4pUw+YArQWkcbAhPTX7YHpQHOgGTBdKVUpvdpcEWkIeAOtlVLdi+szVLQyZ9EwX0Rg5LJAbiWmFNelNK1EPEiB5FGXUyBJTU0tdPuzZ8+mU6dOhISE0KlTJ2bPzvrv6mHDhjFx4kROnjxJQEAAVatWLfS171WcU1vNgDMiEgqglFoNPA2cyFRmNLBARK4DiMjV9Ne7AltFJCa97lagm4j8AOxIL5uslDoEOBfjZ6C2Q3m+et6HoYsDGL86iG+H+WJqohdMtcJ597fjnLh0s0jbbFSjItN7Nc6xzOTJkzl79ixeXl507tyZqlWrsmbNGpKSkujTpw/vvvsu8fHxDBgwgPDwcNLS0pg2bRpXrlzh0qVLdOjQAQcHB3bs2JFl+3/++SdvvfUWaWlpODg4sG3bNmJiYnjxxRcJDQ3F2tqab775Bg8Pj7vqrV27lnfffRdTU1NsbW3x9/fn3LlzDB06lPj4eAC++OILWrVqxd9//8306dOpVq0aQUFB9O3bF3d3dz777DMSEhLYsGEDdevWZcSIEVhZWXH8+HGuXLnCJ598ct9IJD4+ntdee42jR4+SmprKjBkzePrpp7P9/i5evEi3bt0ICwtj8ODBTJ8+nWnTpuHg4MD48eMBmDp1KtWqVWPVqlWcPHkSLy8vhg8fTqVKldi4cSOJiYnEx8ezfft25syZc9/3D7BixQo+//xzkpOTad68OV9++SWmpqZ39eWXX37h77//BmD48OE88cQTfPjhh3eVOXHiBKmpqXTu3BkAGxubnH48Cqw4A4kTkHmlOhzjCCOz+gBKqd2AKTBDRP7Mpq5T5opKKTugF/BZ0Xb7fq0ec2BG78ZM23CMj/48xZSnHi/uS2pasZg9ezbHjh0jKCiILVu2sG7dOgICAhARevfujb+/P1FRUdSoUYONGzcCcOPGDWxtbfnkk0/YsWMHDg4OWbYdFRXF6NGj8ff3x9XVlZiYGACmT5+Ot7c3GzZsYPv27QwbNoygoKC76s6cOZPNmzfj5OREbGwsAFWrVmXr1q1YWVkREhLCoEGDMg5fDQ4O5uTJk9jb21OnTh1GjRpFQEAAn332GfPnz2fevHmAcVTg5+fH2bNn6dChA2fOnLnrurNmzaJjx44sXryY2NhYmjVrxpNPPkn58uWz/IwBAQEcO3YMa2trmjZtSo8ePRg5ciR9+/Zl/PjxGAwGVq9eTUBAAB4eHsydO5fff/8dME6N7d27lyNHjmBvb8+WLVsICQm57/uvUqUKP/74I7t378bc3JxXX32VlStXMmzYMEaNGsWYMWPw9fXlypUrODo6AuDo6MjVq1fv6+/p06exs7Ojb9++hIWF8eSTTzJ79uz7glJhFWcgyerPdsni+vWAJzCOLHYqpdxyq6uUMgN+AD6/M+K57+JKvQS8BODi4pLfvt9naItanL58i6/9Q6lXrQL9mxTrQEh7xOU2cigJW7ZsYcuWLXh7ewMQFxdHSEgIbdu25Y033mDSpEn07NmTtm3b5qm9ffv20a5du4yb2uzt7QHYtWsX69evB6Bjx45ER0dz48aNu+q2bt2aESNGMGDAAPr27QsYTwIYN24cQUFBmJqacvr06YzyTZs2zfglWrduXbp06QKAu7v7XaOlAQMGYGJiQr169ahTpw6nTp267zv49ddfmTt3LmC81+fChQs8/njWfyx27tyZypWNG2/69u3Lrl27mDBhApUrV+bw4cNcuXIFb2/vjDJZ1b/zvWT3/R85coSDBw/StGlTABISEjKmoxYtWpRlu9lJTU1l586dHD58GBcXFwYOHMjSpUsZOXJkvtrJTXEGknCgZqbnzsClLMrsE5EUIEwp9Q/GwBKOMbhkrvt3puffACEiMi+7i4vIN+nl8PX1vTeAFcg7vRpxNiqOt346iqtDeZrUqpR7JU17QIkIU6ZM4eWXX77vvYMHD7Jp0yamTJlCly5deOedd/LUXlb3I4jc/8/v3nILFy5k//79bNy4ES8vL4KCgpg/fz7VqlUjODgYg8GAlZVVRnlLS8uM/zYxMcl4bmJictf6w73Xufe5iLB+/XoaNGiQ6+fLqb1Ro0axdOlSLl++zIsvvpht/cwjney+//nz5zN8+HA++OCDHPtSrVo1IiMjcXR0JDIyMsu1D2dnZ7y9valTpw4AzzzzDPv27SvyQFKcu7YCgXpKKVellAXwHPDrPWU2AB0AlFIOGKe6QoHNQBelVKX0RfYu6a+hlHoPsCV9Yb4kmZua8OXzPjjaWfHy8gNExCaUdBc0rVAqVKjArVu3AOjatSuLFy8mLi4OgIiICK5evcqlS5ewtrZmyJAhvPHGGxw6dOi+ullp2bIlfn5+hIWFAWRMbbVr146VK1cCxh1TDg4OVKxY8a66Z8+epXnz5sycORMHBwcuXrzIjRs3cHR0xMTEhOXLl5OWlpbvz7t27VoMBgNnz54lNDT0voDRtWtX5s+fnxHsDh8+nGN7W7duJSYmJmMtpnXr1gD06dOHP//8k8DAQLp27Qrk/n1l9/136tSJdevWZUxVxcTEcP78/WlBevfuzbJlywBYtmxZlms7TZs25fr160RFRQGwfft2GjVqdF+5wiq2EYmIpCqlxmEMAKbAYhE5rpSaCRwQkV/5N2CcANKAiSISDaCU+h/GYAQwU0RilFLOwFTgFHAo/a+BL0Qkf+O9QrCztuC74b70WbCH0csOsO6Vllhb6NtxtIdD5cqVad26NW5ubnTv3p3BgwfTsmVLwLgQu2LFCs6cOcPEiRMxMTHB3Nycr776CoCXXnqJ7t274+jomOVie5UqVfjmm2/o27cvBoMhY41jxowZvPDCC3h4eGBtbZ3xyy+ziRMnEhISgojQqVMnPD09efXVV+nXrx9r166lQ4cO2a5b5KRBgwa0b9+eK1eusHDhwrtGNQDTpk1jwoQJeHh4ICLUrl07Y00jK23atGHo0KGcOXOGwYMH4+vrC4CFhQUdOnTAzs4uY/3Bw8MDMzMzPD09GTFiBJUq3T2D0aVLF06ePHnf99+oUSPee+89unTpgsFgwNzcnAULFlCrVq271kgmT57MgAED+O6773BxcWHt2rUAHDhwgIULF7Jo0SJMTU2ZO3cunTp1QkRo0qQJo0ePzvf3mBuV1bDzUePr6ytFnSFxxz9XGbk0kK6Nq7NgsA8meieXlouTJ09mO/euFb0RI0bQs2dP+vfvX+zXMhgM+Pj4sHbtWurVq1fs1ysOWf18KqUOiohvbnX1ESkF1KFBVd566nH+OHaZedtCSrs7mqaVkhMnTvDYY4/RqVOnhzaIFJaekymEkW1c+efyLT7fFkL9ajb09KhR2l3StBLRvHlzkpKS7npt+fLluLu7l1KP7rd06dIC1du8eTOTJk266zVXV1d+/vnnLMs3atSI0NAsN4+WGTqQFIJSivf6uBF2LZ431gZTy7487s62pd0tTSt2+/fvL+0uFJuuXbtmLJhreaOntgrJ0syUhUObULm8JaO/P8DVmzr7naZpZYsOJEXAwcaSb4f5ciMhhdHLD5KYkv9tipqmaQ8rHUiKSKMaFfl0oBfBF2OZvP5IljdhaZqmPYp0IMmBiJCQmvebDru5VeeNLvXZEHSJr/zOFmPPNE3THhw6kGRDRJi0cxL//fu/+RpdjO3wGL08azBn8z9sPXGlGHuoafn3IB0jr/ORFE5e8pHs2LEDLy+vjIeVlRUbNmwo8r7oQJINpRTeVb3ZFbGLVafy/sOglGJOfw/cnWyZsPowpy4X7VHhmlYYD1IgedQ9CPlIOnToQFBQEEFBQWzfvh1ra+uMAy6Lkt7+m4PnGjzH7ojdfHLgE5pWb0r9SvXzVM/K3JRvhvrS+4tdjFp2gF/GtqayjWXuFbWy44/JcPlo0bZZ3R2655w0VOcjKVv5SDJbt24d3bt3x9raOtsyBSYij/yjSZMmUlDXbl+T9qvbyzMbnpGElIR81T184brUn7pJnv1qjySlpBW4D9qj4cSJE/8+2TRJZPFTRfvYNCnXPoSFhUnjxo1FRGTz5s0yevRoMRgMkpaWJj169BA/Pz9Zt26djBo1KqNObGysiIjUqlVLoqKism376tWr4uzsLKGhoSIiEh0dLSIi48aNkxkzZoiIyLZt28TT01NERJYsWSJjx44VERE3NzcJDw8XEZHr16+LiEh8fLwkJBj/zZ0+fVru/DvesWOH2NrayqVLlyQxMVFq1Kgh77zzjoiIzJs3T8aPHy8iIsOHD5euXbtKWlqanD59WpycnCQhIUF27NghPXr0EBGRKVOmyPLlyzOuW69ePYmLi8vy8y1ZskSqV68u165dk9u3b0vjxo0lMDBQwsLCxNvbW0RE0tLSpE6dOnLt2rW7rnOnvpOTU8b3kt33f+LECenZs6ckJyeLiMgrr7wiy5YtExGRkSNHSmBgoIiI2Nra3tU/Ozu7bP/fiIh06NBBfvvtt2zfv+vnMx3GcxFz/R2rRyS5qFyuMrPazGLMX2P4+MDHTG0xNc91vWra8VF/D8avDuKdX47xQV/3LI/Z1sqgXEYOJUHnI3n085HcERkZydGjR4vtRksdSPKgtVNrhjYayvITy2nj1Ib2Ndvnue7TXk6EXInjix1naFC9Ai+0di3Gnmpa3onOR/LI5yO5Y82aNfTp0wdzc/Mc2ywovdieRxN8JtCgUgOm7Z5G1O2ofNX9b+f6dGlUjf/9fgL/0/mrq2lFSecjKVv5SO744YcfGDRoUI6frTB0IMkjC1MLPmz3IQmpCby9+20MYshzXRMTxacDvahfrQJjVx3ibFRcMfZU07KXOR/J1q1bM/KRuLu7079/f27dusXRo0dp1qwZXl5ezJo1i7fffhv4Nx9Jhw4dsmw7cz4ST09PBg4cCMCMGTM4cOAAHh4eTJ48Odt8JO7u7ri5udGuXbuMfCTLli2jRYsWnD59ulD5SLp3755tPpKUlBQ8PDxwc3Nj2rRpObZ3Jx+Jl5cX/fr1uy8fyYABA7LMR/Lpp5/e11aXLl2y/P4z5yPx8PCgc+fOREZGAsaRz52UGJMnT2br1q3Uq1ePrVu3MnnyZMCYj2TUqFEZ1zl37hwXL16kffu8z6Tkl85Hkk9r/lnD//b9j4m+ExnWeFi+6oZfv83TX+ymYjlzNrzaGlvr4hlmag8mnY+kZOl8JPmj85EUp3sC7bP1n6VDzQ7MOzSPUzGnsqmUNedK1iwc2oTw67cZu+oQqWl5H9VomvZg0vlI9IgkeyKw/X9wOwZ6fgqZFtmuJ16n36/9sLGw4ceeP1LOrFy+ml4TeJE31x9hRKvazOjdOH/90h5aj9KI5GHIR1JQ+c1H8qgozIhE79rKjlIgBji4BBzqQcuxGW9VsqrErDazeGnrS8wNnMu0ljnPq95rQNOanL5yi0W7wqhfrQKDm7sUde81rVjpfCRaZnpqKycd34HHe8PmqXBq011vtazRkhGNR7Dm9Bq2XdiW76anPPU47etX4Z1fjrEvNLqoeqxpmlbidCDJiYkJ9PkaanjD+pEQGXzX2//x/g+P2z/OjD0zuHr7ar6aNjVRzB/sTa3K1ryy4iAXovUZRpqmPZx0IMmNhTUM+gHK2cOq5+DmpYy3zE3N+bDdhySlJfHWrrfytSUYoKKVOYuGN8UgMOr7QG4lphR17zVN04qdDiR5UaE6DP4Rkm7CqoGQHJ/xlqutK282fZP9kftZdvz+/fG5cXUoz5fP+3A2Kp4Jq4NIMzz6mx+00vMgnf6rj5EvnLwcIw/w5ptv0rhxYx5//HH+85//FEvSPR1I8qq6G/RfAleOwfrRYPj3Ltt+9frxpMuTfH74c05En8h3060fc2BGr0ZsO3WVOZv/Kcpea9pdHqRA8qh7EI6R37NnD7t37+bIkSMcO3aMwMBA/Pz8Cn3te+lAkh/1u0C32fDPRvhresbLSilmtJqBvZU9k/wncTsl///YhraszZAWLiz0O8tPh8KLstealiHzMfITJ05kzpw5NG3aFA8PD6ZPN/5Mx8fH06NHDzw9PXFzc+PHH3/k888/zzhGPrs728F4jLyPjw+enp506tQJMP7l/Mwzz+Dh4UGLFi04cuTIffXWrl2Lm5sbnp6etGvXDjD+Im7bti0+Pj74+PiwZ88ewDiiaN++PQMGDKB+/fpMnjyZlStX0qxZM9zd3Tl71piddMSIEYwZM4a2bdtSv359fv/99/uuGx8fz4svvkjTpk3x9vbml19+yfH7u3OMfIMGDTKOfJ82bRqfffZZRpmpU6fy+eefM3nyZHbu3ImXlxeffvopS5cu5dlnn6VXr14Zh0xm9f2D8Rj5O6cLvPzyy1keD/PLL78wfPhwwHiMfFYJq5RSJCYmkpycTFJSEikpKVSrVi3Hz1gQevtvfjV/Ga6FwJ75UPkxaDICAFtLWz5o8wGjtozio8CPmNFqRr6bnt6rMWevxjN5/VFqO5THx6VS0fZde2B8GPBhvm9ozU1D+4ZMajYpxzKzZ8/m2LFjBAUFsWXLFtatW0dAQAAiQu/evfH39ycqKooaNWqwceNGAG7cuIGtrS2ffPIJO3bswMHBIcu2o6KiGD16NP7+/ri6umactTV9+nS8vb3ZsGED27dvZ9iwYQQFBd1Vd+bMmWzevBknJydiY2MBqFq1Klu3bsXKyoqQkBAGDRqUcTxIcHAwJ0+exN7enjp16jBq1CgCAgL47LPPmD9/PvPmzQOMwcjPz4+zZ8/SoUMHzpw5c9d1Z82aRceOHVm8eDGxsbE0a9aMJ598MtvjWAICAjh27BjW1tY0bdqUHj16MHLkSPr27cv48eMxGAysXr2agIAAPDw8mDt3bkYAW7p0KXv37uXIkSPY29uzZcsWQkJC7vv+q1Spwo8//sju3bsxNzfn1VdfZeXKlQwbNoxRo0YxZswYfH19uXLlSsYJyI6Ojhlnc2XWsmVLOnTogKOjIyLCuHHjiuVeJj0iKYhus+GxJ2Hj63D23yOrmzk240W3F1kfsp6t57fmu1lzUxO+fN6H6rZWvPT9QS7F5j1fvKblV+ZjzH18fDh16hQhISG4u7vz119/MWnSJHbu3ImtrW2e2svpGPmhQ4cCuR8j/+2332b89Z2SksLo0aNxd3fn2Wef5cSJf6eN7xwjb2lped8x8ufOncsol5dj5GfPno2XlxdPPPFExjHy2blzjHy5cuUyjpGvXbt2xjHyd77P/B4jn/n737ZtW8Yx8l5eXmzbto3Q0FDAeIz8nfO98uLMmTOcPHmS8PBwIiIi2L59O/7+/nmun1fFOiJRSnUDPgNMgUUict8knlJqADADECBYRAanvz4ceDu92Hsisiz99SbAUqAcsAkYLyV9e76pmXG9ZHFXWDMcRm2FKsZTRcd6jWVf5D5m7JmBu4M71ctXz1fTlcpb8N1wX/p8uYfR3x9g7ZiWWFvogeOjJreRQ0nQx8g/+sfI//zzz7Ro0QIbGxsAunfvnhHwi1KxjUiUUqbAAqA70AgYpJRqdE+ZesAUoLWINAYmpL9uD0wHmgPNgOlKqTvzPF8BLwH10h/diusz5MiqonEnl5klrHwW4q8B/24JTjGk8Naut0gz5P/o63rVKjB/kDcnIm/yxtpgDHonl1ZE9DHyZesYeRcXF/z8/EhNTSUlJQU/P7+HbmqrGXBGREJFJBlYDdz7SUcDC0TkOoCI3Jnk6wpsFZGY9Pe2At2UUo5ARRHZmz4K+R54phg/Q87sXIz3mMRdgdXPQ0oiALUq1mJKsykEXg5kyfElBWq6Q8OqvNX9cTYdvczn20OKstdaGaaPkS9bx8j379+funXr4u7ujqenJ56envTq1Svf32Ou8pKPtyAPoD/G6aw7z4cCX9xTZgPwEbAb2Ad0S3/9DeDtTOWmpb/mC/yV6fW2wO+59aUwOdvz5NhPItMriqwbKWIwiIiIwWCQ/+74r3gt85KjUUcL1KzBYJDX1wRJrUm/y+/Bl4qyx1opyContlZ8hg8fLmvXri2Ra6WlpYmnp6ecPn26RK5XHAqTs704RyRZJSe/d47GDOP01BPAIGCRUsouh7p5adN4caVeUkodUEodiIoq5qyEjftAx2lwdC34fXTn+rzT8h0crB0KvCVYKcWsPm74uNjx+togjkXcyL2SpmklSh8jX7xTW+FAzUzPnYFLWZT5RURSRCQM+AdjYMmubnj6f+fUJgAi8o2I+IqIb5UqVQr1QfKk7evgORj+fh+OrAX+3RIcHhfOBwE5L5xlx9LMlK+H+mJvbcHo7w9w9VZiUfZa0wqkefPmeHl53fU4evRoaXfrLkuXLi1QUqvNmzff99n69OmTbflGjRoRGhrKxx9/XJjuPtzyMmwpyAPjaCMUcAUsgGCg8T1lugHL0v/bAbgIVAbsgTCgUvojDLBPLxcItMA4OvkDeCq3vhT71NYdKUkii7uLzHQQOb8v4+XPDn4mbkvd5I+wPwrc9LGIWGn49h/yzIJdkpCcWhS91UqYntrSHmQP5NSWiKQC44DNwElgjYgcV0rNVEr1Ti+2GYhWSp0AdgATRSRaRGKA/6UHjUBgZvprAK8Ai4AzwNn0YPJgMLOAgSvA1hlWD4YY4+6VV7xewcPBg5l7ZhIZF1mgphvXsOXTgZ4cvhDLWz8dLZbzcjRN0wpCZ0gsDtfOwKJOYFMNRm6BcnZcvHmR/r/1p6F9QxZ3XYypiWmBmp6/LYSPt55mcveGjGlft4g7rhWnRylDovbo0Tnbi0nK1askhYblv6LDY8aRSUworB0OaSnUrFiTqS2mcujqIRYdXVTgPo3r+Bg9PRz58M9T/HXiSoHb0TRNKyo6kGRDRIiY8H9ceOEFksMj8t+Aa1voNQ9C/4ZNE0GEXnV60d21O18Ff0VwVHCuTWRFKcWc/p641bBl/OrD/HM5+xueNE3TSoIOJNlQSlF9+nQMiYlcGPkiqQXZQuw9BNr8nzHv+94FKKWY1mIa1ayrMdl/MnHJcQXqWzkLU74d5kt5SzNGfR9ITHxygdrRyp4H6Rh5nY+kcPKaj2TSpEm4ubllnORcHHQgyYFVg/q4fL2Q1KhrXBg5irQbBbiP407e9y1vw6lNVLCowOx2s7kUf4n3979f4L5Vt7Xim2G+XLmZxCsrDpKcmr/sjFrZ9CAFkkfdg5CPZOPGjRw6dIigoCD279/PnDlzuHnzZqGvfS8dSHJRzsuLml/MJzksjIsvvYwhPj73Spndm/f9UhDeVb152eNlfgv9jU2hmwrcN6+adszp78H+sBim/3pM7+TScqXzkdztUc9HcuLECdq3b4+ZmRnly5fH09OTP//8M8fPWCB52SP8sD+K4j6SG1u2yIlGjeX8Cy9IWlJS/hu4eVnk40YicxuI3IiQlLQUGbJxiLRY2ULCb4UXqm8f/nFSak36XZbsCi1UO1rxyrxPP3LWLDk3ZGiRPiJnzcq1D2FhYdK4cWMREdm8ebOMHj1aDAaDpKWlSY8ePcTPz0/WrVsno0aNyqgTGxsrIiK1atWSqKiobNu+evWqODs7S2io8ecwOjpaRETGjRsnM2bMEBGRbdu2iaenp4iILFmyRMaOHSsiIm5ubhIebvx3cP36dRERiY+Pl4SEBBEROX36tNz5d7xjxw6xtbWVS5cuSWJiotSoUUPeeecdERGZN2+ejB8/XkSMR6R07dpV0tLS5PTp0+Lk5CQJCQmyY8cO6dGjh4iITJkyRZYvX55x3Xr16klcXFyWn2/JkiVSvXp1uXbtmty+fVsaN24sgYGBEhYWJt7e3iJiPCqlTp06cu3atbuuc6e+k5NTxveS3fd/4sQJ6dmzpyQnJ4uIyCuvvCLLli0TEZGRI0dKYGCgiIjY2tre1T87O7v7+rx582Zp1aqVxMfHS1RUlLi6usrcuXOz/HwP5H0kj5qKnTvjOOs94vfs5dLrryP5HZpWqJae9/0WrBqIWUoiH7Q13u0+2X8yqYaCD3Xf6NKAzo2qMfP3E+wMKebjYLRHhs5H8ujnI+nSpQtPPfUUrVq1YtCgQbRs2RIzs6JPS6ETXeSD3TPPYLh5iyvvv0/k29NwfH8WyiQfsfhO3vcfBsJPo3EeuIK3W7zN5J2T+fbIt7zi9UqB+mViovh0oBf9v9rD2JWH2DC2NXWq2BSoLa1kVH/rrdLuAiI6H4nVo5idAAAgAElEQVTIo52PBIxTbVOnTgVg8ODBxXIemB6R5JP9sKE4/Oc1bmzYwJUPZud/XSIj7/sm2PoOPer0oGedniw8spDDV3POhZATG0szvh3mi5mpCaOWHeDG7ZQCt6U9unQ+krKVjyQtLY3o6GgAjhw5wpEjRzJGb0VJj0gKwOGVVzDcuEnMsmWYVqxIldfyuYWx+csQfQb2fgGVH2Nq86kcvnqYyf6TWdd7HRUsKhSoXzXtrVk4pAnPL9rHuB8OsWREU8xM9d8K2r8y5yPp3r17Rj4MABsbG1asWMGZM2eYOHEiJiYmmJub89VXXwH/5iNxdHRkx44d97WdOR+JwWDIyLk+Y8YMXnjhBTw8PLC2ts42H0lISAgiQqdOnTLykfTr14+1a9fSoUOHQuUjuXLlSrb5SCZMmICHhwciQu3atbNclL/jTj6SM2fOMHjw4PvykdjZ2WWZj2TEiBFUqlTprra6dOnCyZMn7/v+M+cjMRgMmJubs2DBAmrVqnVXzvbJkyczYMAAvvvuO1xcXFi71nhY7IEDB1i4cCGLFi0iJSWFtm3bAlCxYkVWrFhRLFNbpb4QXhKP4ji00WAwSMRbb8mJBg3l2pIl+W8gNUVkeT+RGZVEzmyXoKtB4rnMUyb6TRRDek6TglodcF5qTfpdZvx6rFDtaEVLH9pYsnQ+kvzRi+2lQCmF48yZVOjalauzPyR2/fr8NWBqBv0XG3O9rxmOJ1aM8RzDH2F/8Hto9n8R5cXApi682NqVJbvPsTog+4VDTdMKT+cj0VNbhaJMTakx5yPC4+OJnPYOJjYVqNg1H/OPd/K+f9sJVj7L6FFb2XtpL7P2z8Krqhc1K9TMvY1svPVUQ85ExTHtl2O4OpSneZ2sd5FoWkE0b96cpKSku15bvnw57u7updSj+y1durRA9TZv3sykSZPues3V1ZWff/45y/J38pGUZfr03yJguH2bC6NGk3D0KDW//BKbtm3y10D4AVjaAxw9iez3Df02DcbV1pWl3ZdibmJe4H7dSEihz5e7ib2dwi9jW1PT3rrAbWmFp0//1R5k+vTfUmZibU3NhV9h+dhjhL/2GrfTd7nkmbMv9FkIF/fjuO093mkxjSPXjrAweGGh+mVbzpzvhjclzSCMWnaAuKTCH8ugFU5Z+MNNe/gU9udSB5IiYlqxIi6LvsW8enUuvjyGxJMn89dAprzv3S4E83Tdp1l0dBEHrxwsVL9cHcqzYLAPZ6LimLD6MGkG/YustFhZWREdHa2DifZAERGio6Pv29GWH3pqq4ilXLrEueeHIMnJ1FqxHMv0u3zzRAQ2vArBq4h/egHPhq0ixZDCul7rsLXM293F2Vm25xzTfz3OK0/UZVK3hoVqSyuYlJQUwsPDSUxMLO2uaNpdrKyscHZ2xtz87qn0vE5t6UBSDJJCwzg/ZAjK0pLaK1dgXqNG3iunJsPyPhAewNE+nzPs0Ed0qtWJOe3mZHnXcF6JCFM3HGPV/gt8OtCTPt7OBW5L07SyQa+RlCLLOq64LPoWQ1wcF14cSWr6naV5YmYBA5eDbU3cN01lbINBbD63mV/O5nwqaW6UUrzbuzEt6tgzaf1RDl/IOneBpmlafulAUkysGjWi5tcLSbl8mQujRpOWnxwA1vYweA0Y0nghcC2+Vbx4f//7XLhZuHtCzE1N+Or5JlSvaMVLyw8SeSOhUO1pmqaBDiTFytrHB+f580k6c4aLY17BkJCPX9zped9NY8L4ICoGcxNzJvlPIsVQuDO0KpW3YNFwXxKS0xj9/QESkvN/fpGmaVpmOpAUM5u2bXCa8xEJQUGEv/YfJDkfaXHT875XD9vFdAsXjkUf48uggmW3y6x+tQp8PsiL45du8sbaYL2LSNO0QtGBpARU7NYNx//NJH7XLiImvonk5xRT7yHQ5r90ObqJvhUb8t3R7wi8HFjoPnVsWI3J3Rqy8Wgkn287U+j2NE0ru3QgKSF2/fpRddIkbm3eTOT06fkbBXScBo2eZtKRv3CxqszknZO5kVSA/PH3eKldHfr6OPHpX6f542hkodvTNK1s0oGkBFV+YQQOr77CjXXrufrhR3kPJiYm8MxCrB29+PB8CDEJ0czYM6PQU1JKKd7v446Pix3/XRPMsYjCBydN08oeHUhKmMNrr1FpyBBili4lemE+jkCxsIZBq2lsZstrccn8deEvfgr5qdD9sTI3ZeHQJlSyNuel7w9w9Za+WU7TtPzRgaSEKaWo9tYUbJ9+mqjPPidm+Yq8V07P+z4i9gbN08z4MGA2YTfCCt2nqhWs+GaYL9dvp/Dy8oMkpuidXJqm5V2xBhKlVDel1D9KqTNKqclZvD9CKRWllApKf4zK9N6HSqlj6Y+BmV7vpJQ6lF5+l1LqseL8DMVBmZjgOOs9bJ7sxJVZs4jdsCHvlau7YdJ/CbMuXcAiLcW4JTit8Gl13Zxs+WSAJ4cvxPLswr2sDrjArUSdrlfTtNwVWyBRSpkCC4DuQCNgkFKqURZFfxQRr/THovS6PQAfwAtoDkxUSt1J8vwV8LyIeAGrgLeL6zMUJ2VmhtPHH2PdsgWRU9/m1l9/5b1y/S5U6/w+7165zMmYk8w/PL9I+tTd3ZGPn/UkISWNyT8dpemsv5iw+jC7z1zDoA971DQtG8U5ImkGnBGRUBFJBlYD92enz1ojwE9EUkUkHggGuqW/J8CdoGILXCrCPpcoE0tLan7xBVZujYn4v/8Sv3dv3is3f5lObkPpf/MWS44vYV/kviLpU78mzmz9v3ZsGNua/k2c2X7qKs8v2k/bj3bw8ZZ/OB8dXyTX0TTt0VGcgcQJuJjpeXj6a/fqp5Q6opRap5S6kxIwGOiulLJWSjkAHYA7740CNimlwoGhwOzi6X7JMClfHpevv8aidm0ujh1HQlBQ3it3/YCJdj64Jqcw9e83uJ5YNOdnKaXwqmnHe8+4EzD1SeYP8uaxqjYs2HGG9nP+ZsDCvawJvKjzm2iaBuQzkCilTDJNMeVaPIvX7p0f+Q2oLSIewF/AMgAR2QJsAvYAPwB7gTu/tf4PeEpEnIElwCfZ9PUlpdQBpdSBqKioPHa5dJja2VHzu0WYOThw4eUxJP5zOo8VzbB+dikfplUkJimW6X+/XuR3qVuZm9LLswbLXmzGnsmdeLNbA67FJ/Hm+iM0fe8v/rsmiD1n9dSXppVluR4jr5RaBYwB0oCDGKeTPhGRObnUawnMEJGu6c+nAIjIB9mUNwViROS+xBvpfVgBBAL7RKRu+usuwJ8iktXaS4aSPka+oJLDIzj//POIIY3aK1ZgUatW3irGXmDZii7MrWDONJ//Y4D7i8XaTxHh8MVY1h4I5/fgS9xKSsW5Ujn6+TjTv4mzTumraY+IojxGvpGI3ASewThKcME4pZSbQKCeUspVKWUBPAf8ek8nHTM97Q2cTH/dVClVOf2/PQAPYAtwHbBVStVPr9P5Tp1HgYWzEy6Lv4OUVC688CIply/nraKdC0OfXk6rhCTmHPyU0GvF+5UopfBxqcQHfd0JfPtJPnvOC1eH8ny+PYS2H+1g4Nd7WXcwnHg99aVpZUJeRiTHMe6eWgV8ISJ+SqlgEfHMtXGlngLmAabAYhGZpZSaCRwQkV+VUh9gDCCpQAzwioicUkpZAXcSn98ExohIUHqbfYCZgAFjYHlRREJz6sfDMiK5I+HoMS6MGIFZ9erUWrEcs0qV8lQv6vD39Ds8m6rmFVg1yB8LM8ti7undLsUm8PPhCNYdDCfsWjzWFqY85e7Is02caeZqX6jEXJqmlbwiy5ColPoPMAnjAngPjCOSFSLStig6WhIetkACEB8QwMXRL2H52GO4LFuKqY1Nnur9/ecEXruyjWEVGjKx79pi7mXWRISD56+z7mA4vx+JJC4pFRd7a/r5ONOviRPOlfTUl6Y9DIo11a5SykxEHpp5i4cxkADc+vtvwse9hrWXFzUXfYuJlVXulUR474eu/JgSydd1B9OqzZTi72gObiensvn4ZdYdDGf3GWOmyFZ1K9O/iTPd3KpjbWFWqv3TNC17RTkiGY9xd9QtYBHgDUxO31n1UHhYAwnAjY0bufTGRGzatcP5i/koc/Nc6yQm3uS51U9ww5DI+nafYf9Y5xLoae7Cr9/mp0PGqa8LMbexsTSjh7sj/X2d8a1VSU99adoDpigDSbCIeCqlugJjgWnAEhHxKZquFr+HOZAAXF/9I5dnzKDiU09RY85HKFPTXOv8cymQwVtepGVyKvP7bURVrlMCPc0bESHw3HXWHrjIxqOR3E5Oo3Zla/o3caaPjzNOduVKu4uaplG0u7bu/Jn4FMYAEkzW94hoxaTScwOp+sbr3Ny0icsz/5ene0Ua1GjK/zV+ET9LM1av6wcJsSXQ07xRStHM1Z45z3oSOPVJPn7Wk+q2Vszdcpo2H25nyKL9/BIUodMAa9pDIi8jkiUY70h3BTwx7sD6W0SaFH/3isbDPiK54+rHnxD97bdUHj2Kqq+/nmt5EeGV357jQPRxVpvU5LEhv4Jp7lNjpeVizG3WHwpn3cFwwq8nUMHSjJ6ejvRvUhMfFzs99aVpJawop7ZMMG7/DRWR2PT7O5xE5EjRdLX4PSqBRES4/O67xK7+kSr//S8OL43Otc61hGv0+6kHlW/H8kPVJ7Hs/QU84L+QDQZhf1gM6w6Gs+loJAkpadRxKE+/Js7083Gmum0eNh1omlZoRbprSynVG2iX/tRPRH4rZP9K1KMSSADEYODSm5O4+fvvVJ8xnUrPPZdrHf9wf8ZuG8vzN24x2fd1aPVaCfS0aMQlpbLpaCTrDoYTEBaDiYI29arQv4kzXRpVw8o89/UiTdMKpihHJLOBpsDK9JcGYbyhsHT3lebDoxRIACQlhfDX/kOcnx81PvoI2149c63zwb73WfXPD3x5OYq2T38HDXuUQE+L1vnoeNYfDGf9oQgiYhOoYGVGb88a9G/ijFdNPfWlaUWtKAPJEcBLRAzpz02Bw+kHLT4UHrVAAmBITOTi6Je4fegQzvPnU6FjhxzLJ6Ul8dxvA4mJDWV95DUchm+CGl4l1NuiZTAIe0OjWXcwnD+ORZKYYuCxqjbGXV/eTlSrqKe+NK0oFHUgeUJEYtKf22NcbNeBpJSlxcVxYcQLJJ0+Tc1vv6V882Y5lg+5HsJzvw+kWWIyX95MRY3eDhVrlFBvi8etxBQ2HY1k7YFwDpy/jomC9vWr0L9JTTo9XlVPfWlaIRRlIBmEMefHDozbftsBU0RkdVF0tCQ8qoEEIPX6dc4PHUrqpUhcli2lnLt7juVXnVzFBwEfMDk2nuctneCFP8Ayb8evPOjCrt2Z+gon8kYituXM6e1Zg2d9nXF3stVTX5qWT0W92O6IcZ1EAfsBExF5aDITPsqBBCDlyhXOD34eQ1wctVYsx7JevWzLigjjto9jX8QeVoVH0MC1EwxcASaPzl/uaQZhz9lrrDsYzp/HLpOUaqB+NePU1zPeTlStoKe+NC0vivusrQsi4lKgnpWCRz2QACRfuMC5559Hoai1aiUWNWtmWzY6IZp+v/bDziCsPh2MVYux0HVWCfa25NxISGHjkUjWHbzIoQuxmJoonqhv3PXV6fFqWJgVZ5JQTXu4FXcguSgi2f+mesCUhUACkHj6NOeHDsO0YkVqrVyBedWq2ZbdHbGbMX+N4TkrF6ae3AU9PwXf4k2IVdrORsWx7mA4Px0K58rNJCpZm/O0lxP9mzjTuEZFPfWlaffQI5JMykogAUg4coQLI17A3KkGLt9/n2Muk48CP2L5ieV8YeJE+9AAGLIO6nYswd6WjjSDsDMkinUHw9ly4grJqQY8nW0Z2bYOT7lVx8xUj1I0DYogkCil5nN/jnUwrpMMF5G85m4vdWUpkADE79vHxZdexrJhQ1wWL8bUpnyW5ZLTkhm8cTBXb19h/fVkqsRGwsgtULVhCfe49Ny4ncIvwREs3X2O0GvxONmVY0Sr2gxsVpOKVg/ucTKaVhKKIpAMz6miiCwrYN9KXFkLJAC3tm0j/D/jsfb1peY3X2NimXW2xLOxZ3nu9+fwsW/EV8f3YGJeDkZtA5sqJdzj0mUwCNtPXWXRrlD2hcZgY2nGwKY1GdGqts5Br5VZxTq19bApi4EE4Mavv3LpzUnYdOqE87xPs81lsuafNfxv3/94o95zDN/+OViUhyYjwHck2DqVbKcfAEfDb/DdrlB+PxKJQYTubo6MauuKt0veUh5r2qNCB5JMymogAYhZuZIr/3uPir17UWP2bJTJ/fP/IsL4HePZFbGLVb5v0zBoHfyzCZQJPN4Lmo8BlxYP/GGPRS3yRgLL9pxn1f7z3ExMpUmtSoxq40qXxtUxNSlb34VWNulAkklZDiQA1xYuJGreZ1QaPJhq097OcnfS9cTr9Pu1HzYWNvzY80fK3bwMgYvg8HJIvAHVPaD5y+DWH8zL1n0Y8UmprD1wkcW7z3Eh5jY17cvxYmtXnvWtiY2lThWsPbp0IMmkrAcSEeHqnLnELF5M5TEvU3XChCzL7b20l5e2vkTnWp35oO0HWJpaQnI8HPkR9n8NUafAunKZnfZKMwhbT1xh0c5QDpy/TgUrMwY3c2FE69o42uqsjtqjpyiPSPk8i5dvYDwB+JcC9q9ElfVAAum5TN55h9i166g6cSKVR2Z9z8iy48uYe2AuXlW8mNdhHpXLVb7TAIT5GwOKnvbi8IXrLNoVxh9HIzFRih4ejoxqUwd3Z9vS7pqmFZmiDCTfAA2Btekv9QOOAzUxJrvK+s/bB4gOJEaSlkbE629w688/qT7zXSoNGJBluc3nNjN111QcyjmwoNMC6trVvbvA9XPGaa9D35f5aa+LMbdZtuccqwMvEpeUSjNXe0a3rUOnhlUx0eso2kOuKAPJdqCLiKSmPzcDtgCdgaMi0qgI+lusdCD5lyQnc3HsOOJ37cLp47lUfOqpLMsdjTrKa9tfIyktiY/bf0wrp1b3F8qY9voGok6W6WmvW4kp/Bh4kSW7zxERm4CrQ3lebF2bfk2csbbQ6yjaw6koA8k/QDMRuZH+3BbYLyINlVKHRcS7SHpcjHQguZshIYELo0aTEBxMzS8XYNOuXZblIuMiGbt9LKGxoUxpNoWBDQdm3aCe9sqQmmbgz+OX+XZnGMEXY7GzNuf55i4Ma1lb50nRHjpFGUhGAm8Df/PvMfLvAz8AM0RkYqF7W8x0ILlf2q1bnB8+nOTQMFwWfYu1b9Y/K/Ep8bzp/yb+4f4MeXwIb/i+gWlOJwXraS/AuCZ18Px1Fu0MY/OJy5iZKHp51mBUmzo0qvHQHAqhlXHFcYx8M4yBJOBhOkIedCDJTmp0NOeHDCU1KsqYy6Rx4yzLpRnSmHtgLitOrqCtU1vmtJ9DefOsj13JoKe9MpyPjmfJ7nOsOXCR28lptH6sMqPa1KF9/Sp6HUV7oBV1IOmNcSQC4Cciv+WxE92AzwBTYJGIzL7n/RHAHCAi/aUvRGRR+nsfAncSi/9PRH5Mf10B7wHPAmnAVyKS1c6yDDqQZC8lMpJzzz+PJCRSa+UKLOvUybbsmn/W8P7+96ljV4cFHRfgaOOY+wX0tFeGG7dT+CHwAkt3n+PyzUQeq2rDyDau9PF20pkctQdSUU5tzcaY1Gpl+kuDMG79nZJLPVPgNMZF+XAgEBgkIicylRkB+IrIuHvq9gAmAN0BS8AP6CgiN5VSLwAdgBEiYlBKVRWRqzn1RQeSnCWfO8e554egzM2pvXIF5k7Zjxj2ROzhdb/XsTS1ZH7H+bhXyTkj413um/ZyNwaUMjbtlZJmYOORSBbtCuVYxE3sy1swpEUthraoRZUKWZ+JpmmloahztnuJiCH9uSlwOLec7UqplhjXULqmP58CICIfZCozgqwDyUTAUkTeS3/+HbBZRNYopQKAwSJyJrcPd4cOJLlLPHXKmMvEvhK1vv8e82rVsi17NvYsY7eN5VrCNd5r8x7danfL38WS4+HImvSbHNOnvXyGQ9ORYOtcyE/y8BAR9ofFsGhnKH+dvIqFmQl9vJwY2daV+tUqlHb3NC3PgSSviRfsMv13Xu+4cgIuZnoenv7avfoppY4opdYppe4kywoGuiulrJVSDhhHIHfeqwsMVEodUEr9oZTKMq+sUuql9DIHoqKi8tjlssuqYUNqfv01qVejONOxE+eHDOXat9+S+M9p7v1jo65dXVb1WEWjyo2Y6DeRr4O/vq9MjizKg+8L8OpeGPYruLSE3fNgngesGQ7n9xinxB5xSila1KnMouFN2f56ewb4OvNLcARdPvVn+OIAdoZE5e971bRSkpcRySBgNrCDf3dtTRGR1bnUexboKiKj0p8PxbiN+LVMZSoDcSKSpJQaAwwQkY7p703FuA4SBVzFuMj/mVIqDpguIh8rpfoC/ycibXPqix6R5F3SmTPc+P134vz9STpxEgCz6tWxadcOm/btKN+iBSbljQvtSWlJTN8znY2hG+lVpxczWs3AwtSiYBfW014AXI9PZuX+8yzbe56oW0k0qFaBkW1dedqrBpZmeh1FK1nFsWurKcZAsh8wyW3nVl6mtu4pbwrEiMh9Ix6l1CpghYhsUkqdArqJyLn0hffYrOpkpgNJwaRcuUr8rp3E/e1H/J49GOLjUebmWDf1pXy7dti0a4957Vp8c/QbFgQtwKeqD/M6zKOSVSGOW9fTXgAkpabxW3Aki3aGcuryLRxsLBneshbPt6iFffkCBmtNy6dST7Wbfgf8aaATxl1ZgRjXNo5nKuMoIpHp/90HmCQiLdKDip2IRCulPIBVGNdpUtMX/0+LyGKl1BPAHBFpmlNfdCApPElO5vahw8T5+xPn70fymbMAmNesiU27dpxqUJ7JccupZFuNBZ0WUMcu+91febugwLmd/+72QqXv9nrZOBVWRnZ7iQi7z0SzaFcof/8ThaWZCf2aODOyjSt1q9iUdve0R1xxB5KLIlIzD+WeAuZh3P67WERmKaVmYtz19atS6gOgN5AKxACviMgppZQVcCi9mZvAGBEJSm/TDuMOMhcgLv294Jz6oQNJ0UsOjyB+pz9xfv7E79uHJCYiFuYcq6UIfsyU3kNm0LxJ76K52PXz6dNey8r0tFfIlVt8tyuMnw5HkJxqoFPDqoxs60rLOpWzTA2gaYVV6iOSB4kOJMXLkJTE7YBA4vz9id2xDQk3znomOjtQ48me2LRvh3WTJiiLQk7J3Jn2CvgGrp4os9Ne1+KSWLHvPMv3nic6PpnGNSoyqq0rPdxrYGGW1/0zmpa7osjZPh/I6k0FDBeRh+acBx1IStb1kBP8uHQStofO4n5RYZpqwMTaGutWLY2L9u3aYV69esEvoKe9AEhMSWPD4QgW7QrjzNU4qlW0ZHir2jzfrBa21lmnVda0/CiKQDI8p4oisqyAfStxOpCUvFRDKnMC57D+yEqei2/MwJh6JO7cQ2pkJACWDRpg0749Nu3bUc7TE2VWwBNys5326gfmZSPZlMEg+IdE8d2uMHaGXKOcuSkDfJ15obUrtR1yOcpG03JQLFNbSqnqInK5UD0rBTqQlJ4fTv3A7IDZ1LOrx/yO87GPjCPOz484P39uHzoEaWmYVKyITZvWxp1gbdtiVrly/i9077RXOXvj2V5lbNrrZORNvtsVxi9BEaQahM6PV2N0uzr41qqk11G0fCuuQHJIRHwK1bNSoANJ6doVsYs3/N6gnFk55necj5uDG2A8gTh+9x7jTrCd/qRFXQPAyt09474VKzc3lEk+5v2znPbqmX62V9mZ9rp6M5Hv955nxf7zxN5OwdPZlpFt6/CUW3XMTPU6ipY3xRVIHor8I/fSgaT0hVwP4bXtrxGdEM2sNrPoUrvLXe+LwUDiyZPE+xt3giUEB4MIpvb22LRtYxyttG6NqZ1dNlfIQsa01/eQGGuc9mr2Mrj3LzPTXgnJaaw/FM7iXWGEXovHya4cI1rVZmCzmlS00usoWs6KK5C8KiJfFqpnpUAHkgdDdEI043eMJzgqmPE+4xnpNjLb6ZbU69eJ37WbOH9/4nfuJC02FkxMKOfllTFasWzYMG/TNcm34Wj6TY5ldNrLYBC2n7rKol2h7AuNwcbSjJ4ejvTxdqJpbXt9nL2WpWLd/vuw0YHkwZGUlsS03dP4I+wPetftzYyWMzA3zfkvY0lLI/HoUeMUmJ8/iceN97SaVa1K+XZtsWnXjvKtWmFqk8sNenraC4BjETdYsvscfxyL5HZyGs6VytHH24k+3k7U0Tc5apnoQJKJDiQPFhFhYfBCvgz+kibVmjDviXnYWeV9yio1Koq4nbuMo5VduzDExYGZGdZNmmSMVizq1s15tHLvtFeVx8F7CHg+B+UdiuBTPvhuJ6ey+fhlfjoUwe4z1zAIeNa0o6+3E708a+ijWDQdSDLTgeTBtCl0E9N2T6NaeeOxKq62rvluQ1JSSAgKyhitJJ0+DYC5k5PxkMl27SjfvDkm5bJZE0m+DUfXGgNKxAEwMYMG3cF7KNTtBKYF3Jb8kLlyM5Ffgy7x0+EITkbexMxE8USDKvTxdqbT41V14q0ySgeSTHQgeXAFXQ1i/I7xpBhS+PSJT2nu2LxQ7aVERhLn528crezdiyQkoCwssG7e/N/Riks2hzJcPQmHV0Dwarh9DSo4gucg40ilct1C9ethcjLyJj8fjuCXoAiu3EyigtWd9RRnfGtV0uspZYgOJJnoQPJgC78Vzrht4zh/8zxvt3ibfvX7FUm7huRkbgcGZuwESz53DgCL2rUzRivWTZticu/RLanJELIZDi2HM1tBDFCrtXGU0qi3MZ9KGZBmEPacvcbPhyL48/hlvZ5SBulAkokOJA++W8m3mOg3kd2XdjOi8Qgm+EzA1KRop1OSz58nzn8ncf7+3N6/H0lORllbU75FCyqPfBHrJk3ur3QzEoJ/MI5UYs6CRQVw6xZ9nVsAACAASURBVAs+w8CpSZlZoI9PSmXLifvXU/r5ONHTQ6+nPKp0IMlEB5KHQ6ohlQ8DPmT1P6vpULMDs9vOxtrculiuZUhIIH7/fuL9/bn11zZSo6Op+vrr2L8wIutFehG4sNc4SjmxAVJu/7tA7zEQbKoUSz8fRFduJvJLUAQ/HYrg1OVb6espVenr40THhno95VGiA0kmOpA8XFaeXMlHgR9Rv1J95necT/XyhTjgMQ/S4uKInDKFW1v/okLXrjjOmoWpTQ7TV4k34fjPcHg5hP9/e2ceH2V1Lv7vycqSDJCENSHsQWKVRRCtOwkQXFC0tuoFl17b2p8KWK3WtrfS2rpc64aodb2tpIjUK263gpUtbAJWUAEBCRIIIZAESGayzfb8/nhfkkkMJJDMTJbn+/nwycw777znOY6Zb855nvecTR02QQ+1+ZR3Nx/gsLMaR6corrDzKeMG6rIsbR0VSQAqkrZHTn4O9+fcT9eorszNmMuZiWcGtT0R4cjrr3P4yaeIGTiQlOfmEjukCQn2wzssoXTwBP3xfMo7nx9gydZCKj0++id0ZtqoZKaNSWGQLh7ZJlGRBKAiaZvsOrqLu5bdxbHqYzx64aNkDMgIepvln27gwL334q+spN+f/ohjypSmvfF4gn5zNnzzcUCCfjqkX91hEvRg5VOWbitk8ebafMqo/t25VvMpbQ4VSQAqkrZLcWUxs5bP4qvir5h9zmxuO/O2oE+XeA4d4sCs2VRu2ULCLbfQ6757MdGnsC7ViRL0o2dAytgOk6CHE+dTrhuTzIQRvYiN0nxKa0ZFEoCKpG1T5a3it2t/y9K9S5k2dBr/dd5/NbqsSnMRt5tD//0ER7Oz6Tz2HJKfeoroXr1O8SJ2gn5ztpVT8VRAzzPsBP0NHSpBD7C9oIzFm/N5b0tBQD6lH9eOSdZl7lspKpIAVCRtH7/4eWHLC7z05UuM6zOOpy99mm6x3YLebukHH3Dwdw8REdeVlKefpsvYRn+nGqYmQZ8N+RutBH1allVG3MES9D6/sHZ3MYs3az6ltaMiCUBF0n74IPcDHlr3EP3i+jFvwjwGdhsY9Dardu4if+bdePIP0OuX95Fwyy3N++v58A7YYt9BX17UYRP0UDefsmZ3MSIwOtVa7+vKs/vRQ/MpYUVFEoCKpH3x+aHPmb1iNj7x8cxlzzCuz7igt+lzOil48EFcnywjfkoWfR/+48lLhJt0UQ/sCkzQ+yD1+zBmRodL0AMUllr5lMWbrXxKdKR9f8pozaeECxVJACqS9sd+537uWnYX+8r28bvzf8e0YdOC3qaIUPLqqxQ9/QwxgwaRMvfZppUIN4Wyg/DlQksqJbs7dIIeavMp724poEjzKWFDRRKAiqR9UuYu476V97H+4Hpu+95tzB4zmwgT/G1kyz/9lAO/uBepqqLvI4/gyJrcchcXgX2f2gn6dzp8gt7r87M2t4TFn+ezdNshKj0+UhO6cI293pfmU4KLiiQAFUn7xeP38NiGx1i0axEZqRk8cuEjQVtWpU67hYVWifAXX5Bw2230uvcXmKgWTphXO60E/efz6yboR8+AoZkdKkEPVj5lyVb7/pRczaeEAhVJACqS9o2IkP11Nk9seoIzEs5gXsY8enU5xVLd02nX7ebQY49zdMECuowdS/LTTxHVM0gjhqKdtXfQlxdBXB8YdaMllQ6WoIfafMo7nx9g5yHNpwQLFUkAKpKOwar9q7g/537iYuKYN2EeIxJHhKTd0g8+4OB//Y7I+HiSn3m64VWEW4oTJehHT4czr+lwCXoRYfvBMhZ/foD3vqjNp1w5sh/Xjk7mHM2nNAsVSQAqko7DziM7uWv5XZRWl/L4RY9zWeplIWm3audO8mfOxHOggN73/5IeM2YE/wvMWVh7B33JboiJsxP0N3fIBP3J8inXjk5moOZTTplWIRJjTBbwLBAJvCoij9V7/VbgCeCAfWieiLxqv/Y4cIV9/GEReavee58DbhORRnfXUZF0LIoqipi5fCbbSrbxi3N+wS1nNvO+jybiKyuj4MFf41q2DMflU+j78MNEdA3Bl1edBP1i8JRD0vDaPejjgj/N19pwVXtZWi+fMia1Oz+9eDCT0vvoLo9NJOwiMcZEAruAiUA+sAm4UUS2B5xzKzBWRO6q994rgNnAFCAWWAVMEJEy+/WxwCxgmopEaYhKbyW/WfMb/pX3L64bdh2/Oe83REcEd1kVAPH7KXnlVYqefZaYwYNImTuX2MGDg95uDccT9JuzYf+GDp+gBzhYWsl7WwpYuHEfe0sqSO/rYFbmMCal99Zpr0ZoDSI5H5gjIpPt5w8CiMijAefcSsMi+SUQKyJ/tJ+/BiwVkUW2oD4BbgK+UZEoJ8IvfuZtnscrX73C+D7jefLSJ0OyrApA+fr1VolwdTV9H30Ux+RJIWm3DkU77T3o37QT9L3tO+hnQNLQ0McTZrw+P+9/UcDcZd+wt6SCM/s5mJ2ZRuaIXiqUE9AaRPIDIEtEbrefzwDGB0rDFsmjQBHW6OUeEdlvjJkEPIQ1mukCbASeF5EnjTGzgAgRedoY4zqRSIwxPwV+CpCamnpOXl5eUPqptH7ez32fh9Y9REpcCs9nPE+qIzUk7XoOHiR/9myqvviShB//mF6/uKflS4Sbgs9jJeY3Z1uJevFB6vnWZlwDLoS+IzvUSMXr8/PulgKeW/4NeSUVnJXcjdmZw5hwhgqlPq1BJNcDk+uJ5FwRuTvgnETAJSLVxpg7gB+KyAT7td8A12NJ5jCWTP4BLAIuFRHvyUQSiI5IlH8f+jezV8xGEJ659BnG9jnNxRdPEb/bzeHHHuPogjfpcu65JD/1JFFJSSFpu0GchVYJ8RcLoehr61hMPKSeBwMvhIEXdRixeHx+Fm8+wHPLv2H/kUpGpnRjdmYalw7vqUKxaQ0iaXRqq975kcAREfnO3IMxZgGQDRjgNaDKfikV2CMiJx2nq0gUgH1l+7hz2Z3ku/KZc/4crh56dcjaLn3vPQ4+NIdIh4PkZ56hy5jRIWv7hDgPQd4a2LsW9q6B4p3W8Zi4BsQS/PxSuPD4/LzzeT7PLd9N/tFKRvXvzuzMYVySpkJpDSKJwpquysCqytoE3CQi2wLO6SsiB+3H04AHROQ8WyrdRaTEGHM2sAAYJSLeem3oiEQ5JUqrS7l31b1sOLiB28+6nbtH3x2SZVXALhG+eyaeggJ6338/PWZMb11fVK7DllDybLEU7bCOR3etK5Z+o9qlWNxeP//7eT7zlu/mwLFKRqd2557MNC4altS6PqcQEnaR2EFcDjyDVf77uoj8yRjzB+AzEXnfGPMoMBXwAkeAn4vIDmNMJ+Bz+zJlwB0isqWB66tIlFPG4/fwyIZHeHvX20wcMJE/XfgnOkd1DknbvrIyCn71IK7ly3FccQV9//D70JQInw6uw7VS2bu2diosuiukjg8Qy+h2JRa3188//r2f55fvpqC0inMG9OCezDQuGJrY4YTSKkTSWlCRKPUREd7Y/gZPfvYk6Ynp/PmSP5MSnxKatgNKhGOHDCZ57lxiBw0KSdvNwlVUK5a8tXDYruSP7gL964klqu2ve1Xt9bHos3xeWLGbg6VVjBtoCeX8IR1HKCqSAFQkyolYsW8FD6x+gGpfNRmpGdycfjOjeo0KSdvl69Zx4N77ELebvo8+gmNSGEqEm0N5ccCIZU09sZwbIJYxbVos1V4fb23az/MrdnOorJpzByXUCKW9oyIJQEWinIzC8kIW7FjA27vexul2cnbS2UxPn07mgMyg38ToKSggf9Zsqr76ioT//DG97glTiXBLUF5STyx2OjSqszUVNuBCSy7JYyAqNryxngZVHh8LN+7jhZW5HHZWc95gSyjjB7dfoahIAlCRKE2hwlPBe7nvkb09m33OffTp2oebzriJ69KuwxHjCFq7frebQ488wrGFb7WOEuGWorwE9q2rFcuhrdbxqM4BI5YLIfmcNiWWKo+PBRv28eKqXIqc1Xx/SCL3TExj3MCEcIfW4qhIAlCRKKeCX/zk5Ocwf/t8NhZupHNUZ64Zeg3TR0wP6s2Mx959l8KH5hDZrRvJzz5Dl9GtoES4Jak4AnmBYvnKOh7VyRbLRTDgAmvByTYglkq3j79vyOMvq3Ipdrm5cGgS90wcxjkD2o9QVCQBqEiU02XHkR3M3z6ff377T3x+H5f0v4Sb029mbO+xQUm4Vu3YYZUIFxbS+4EH6PEfN7XfxO5xseSthb2roXArIJZYUsZZYhl4ASSPhehO4Y72hFS6fWR/agmlpNzNRcOSuGdiGmNSe4Q7tGajIglARaI0l6KKIhbuXMiinYs4Vn2MEQkjmJE+g6yBWUS3cOmrr7SUggd+hWvlShxXXmmVCHcJ/q6PYafiCOxbb98guRoKvwIEImNrp8IGXGBJphWKpcLtZf76PF7K2cORcjeXpPXknolpjOrfPdyhnTYqkgBUJEpLUeWt4sM9HzJ/+3z2lO6hZ+ee3HDGDVyfdj09OrXcX6Di91Py8ssUPTuX2KFDSZ77bNsoEW5JKo9C3nq73HgNHPySGrGkjKvNsbQysZRXe3ljfR4v5+RytMLDZcMtoZyd0vaEoiIJQEWitDQiwtqCtWRvz2ZtwVpiI2O5ashVzBgxg8HdW27ZeNfatRTcex/i9VolwhMntti12xyVx+wRi51jKfwSxA+RMQ2IJTQ3mJ4MV7WXv63byyur93CswkPGGb2YnZnGWSmhWYG6JVCRBKAiUYLJ7qO7yf46mw9yP8Dtd3NB8gXcnH4z5/c9v0XyG56CAvJnzqJq61YSf3I7PWfNarslwi1J5TFrQ6+9q78rluSxdcUSE76pQWeVxxbKt5RWesgc0ZvZmcP4XnLrF4qKJAAViRIKjlQdYdHORSzcsZCSqhKGdh/KjPQZXDH4CmIjm1eF5He7OfSnRzj21lt0GT/eKhFObL/3L5wWVaV1xXLwC0ssEdFWJdjAC2HIBEssYVjSpazKw1/X7uXV1Xsoq/IyKb03szPTSO8XvNLy5qIiCUBFooQSt8/NR99+xPzt89l5dCcJnRL44fAf8qPhPyKpc/PuDzn2zmIKf/97Irt3J+XZZ+g8KjR34bdJqkph34YAsWyxxBLrgEEXWztGDs2A7qHZn+Y4pZUe/mftt7y25lucVV6yzuzDrMxhjOjb+oSiIglARaKEAxFhU+Em5m+fz6r8VURFRHH5oMuZkT6D4QnDT/u6VV9/bZUIHzpE7189QI+b2nGJcEtSeQy+XQW7l1n/yvKt40lptVIZcEHI8iullR5eW/Mt/7PmW5zVXi4/qw+zMtIY3ic+JO03BRVJACoSJdzkleWRvT2b93Lfo9Jbyfg+45mRPoOLUi46rWXsfaWlFNz/AK5Vq3BMvYq+c+Z0jBLhlkLE2oo4dxns/sQqOfZVW/ewDLjAFksmJA2DIEv6WIXbEsravZS7vVx+Vl9mZwxjWO/wC0VFEoCKRGktlFaX8vaut1mwYwGHKw4z0DGQ6SOmc9WQq+gSfWoiEL+fkpdeomjuc8QOG0bK3GeJGTgwOIG3d9wV1s2Ruz+x/pV8Yx3v1t8aqQzNtKbDOgUvQX603M2ra/bw17V7qfD4uPLsfszKGMrQXuETiookABWJ0trw+D38a++/mL99PltLtuKIcXB92vXceMaN9O7a+5Su5Vq9hoL77kN8Pvo9/hjxGRlBiroDcTTPHq0sgz2rwO0EE2ktlz80w/rXZyREtPymaEfK3byyeg9/W7eXSo+PqSP7MTNjGEN6Nrr1UoujIglARaK0VkSELUVbmL99Psv2LSOCCCYNnMTN6TdzZtKZTb6O58ABaxXhrVtJ/MlP6DlrppYItxQ+D+zfWDtaKfzSOt4lqXa0MvgyiOvZos2WuKp5efUe3liXR7XXx9Wjkrl7wlAGh1AoKpIAVCRKWyDfmc/fv/47i3cvptxTzpheY5iRPoPL+l9GZERko+/3V1dbJcKLFtHlvPNIfvLPWiIcDFyHIXe5JZXc5VBRYh3vO6o2ad+CJcbFrmpeztnDG+v34vb6uWZ0MjMnDGNgUvB31lSRBKAiUdoSLreLd755hwU7FnDAdYDkuGSmj5jOtGHT6Brd+JfHsf99xyoRTkiwSoRHjgxB1B0Uv98qK95tJ+3zN4H4rBLjwZdYYhmSAd37N7upImc1L63KJXtDHh6fMG20NUIZkBg8oahIAlCRKG0Rr9/Liv0rmL99PpsPbyYuOo5rh13LTSNuIjku+aTvrdy2jQMzZ+E5fJg+v36Q7jfcoCXCoaCmxPgTu8T4gHU8abg9WpnQ7BLjw84q/rJyD3/fkIfXL1w7Opm7JwwjNbHlq/ZUJAGoSJS2ztbirbyx/Q0+3vsxgtRsCzyy58gTCsJ37BgHHniA8lU5dLt6Kn3mzCGic/jXoOowHC8x3v2JlbgPLDEeeKE1UmlGifHhsipeWJnLgo378PuF68akcNeEofRPaDmhqEgCUJEo7YXC8kLe3PEm/9j1D5xuJ2clncWM9Bkn3BZY/H6KX3yR4nnPE5uWZpUIDxgQhsgVq8R4be00WE2JcWptJdigS6DTqd3hXlhaxYsrd/Pmxv34Rbh+bAp3XjaUlB7NF4qKJAAVidLeqPBU8H7u+2R/nU1eWR59uvbhxjNu5Lph19Et9rv3OrhWr6bgvl8ifr9VIjxhQhiiVupwdK8lldzlsGcluF0QEWWVGA+ZYI1W+pzd5BLjg6WVvLAil7c27UcQrh/bnzsvG0py99MfhapIAlCRKO2VU9kW2J1/gAOzZlG1bRuJP/sZPe/8f5iYmDBFrtTB64b8jbWjleMlxl171kplyATo2vhabQXHKnl+xW4WfbYfgLfv+D4jT3NzLRVJACoSpSPQlG2B/dXVHPrjHzn2j7eJcDiIz8jAMSWLruedp1JpTTgPwZ4VtUn7yiOAgX6janMrKeMg8sT3Ch04VsnCjfuYnZlGZMTpFVqoSAJQkSgdieLKYhbusLYFPlp9lBEJI5iePp0pA6fUbAvsWruWsg8+xLlsGX6n05JKZmatVKJDv8y6cgL8PrvE2L53JX+jvYpxNxh8cYuWGNdHRRKAikTpiBzfFjh7eza5pbkkdU7ixjNurLMtsN/tpnzdOpwfLbGk4nIR0a0b8ZkZOLKm0PW88SqV1kajJcYZMOD7LbKKcasQiTEmC3gWiAReFZHH6r1+K/AEYP+XYJ6IvGq/9jhwhX38YRF5yz7+d2As4AE2Aj8TEc/J4lCRKB0ZEWFdwTrmb59fsy3wlYOvZETCCOJi4oiPiScuOo4uEkPnzTuRZWupXrkav8tFZLduxE3MxDE5S6USZjx+D063k7LqMuunuwxndRllR3ZRVvglZSW7KHMV4EQoi4rG2SmesuhYXs18mX69mr7cTiBhF4kxJhLYBUwE8oFNwI0isj3gnFuBsSJyV733XgHMBqYAscAqYIKIlBljLgc+sk9dAOSIyIsni0VFoigWucdymb99Ph/u+ZBqX/UJz4vyCufui+X7O4Szd1TTqdpPZZco9o3pS+H4wVSeNZSuXRzERdeKKC4mruZnfHQ8cTFxREXoel/HEREqvBU43U5Kq0trZFDmDhBDPVEEvl7prTzp9aMjonHExBNvonB43MRXleKocvGLaxbSJ/nc04q5qSIJ5qd8LrBbRPbYAS0Erga2n/RdFunAKhHxAl5jzBdAFrBIRP55/CRjzEYgpcUjV5R2ypDuQ5jz/Tn8evyva76gXG4XTo/10+Vx1fx0nuVk9yQXX5WXkvjVfgb/u5C0TfkMX7MfZ+dVbBhuWHmGYdsAg/8EydzOUZ3ryKVrdNc6o6BA6cRHx9M1pmvN8+OSiolsPUUAx0cFJ/rCb0gGgT994jvp9eOi43DEOIiPiccR6yA1PhVHrP08pvanI8aBI9ZR51hsZOx3b049tj8ouZP6BFMkycD+gOf5wPgGzrvOGHMx1ujlHhHZD3wBPGSMeQroAlxGPQEZY6KBGcCsIMSuKO2amMgYkjonNX3r30nWD391NeVr1lD20RImLl9O5pYK6N4NuXgcFRePpjQ9Bae/gnJPeY2kXB6X9diWVGFFIeXucpyexv/KBoiJiKmRT9fo74om8HGd1wMk1SmyE8YYRIRKb2XtF389GdQfGdQ/3li8URFRdb7ou3fqTqojteZYHSHE1hVDXHRckxbnPCVCIBEIrkga+hOl/jzaB8CbIlJtjLkD+BvWFNbHxphxwDqgCFgPeOu99wWsaa3VDTZuzE+BnwKkpoZ2T2ZFaa9ExMYSn5FBfEYG/qqqGqm4PllB1/c/wdGjB/ETJ+KYkkWXceMaXcre6/fWSue4cI6PjGzx1IyWAh6XlJXUGT01RpSJonN0Zyo9lXil/ldJXU51VBAfXSuF48LqaAQzR3I+MEdEJtvPHwQQkUdPcH4kcEREvnNbrjFmAZB9fFrLGPMQMBq4VkT8jcWiORJFCS7+qipcq1fjXLIU54oVSEUFkQkJtVIZOzZo+6P4xU+5p/w7U3ROt7OOpCo8FXSJ7lJXBqEYFbRhWkOyPQpruioDqyprE3CTiGwLOKeviBy0H08DHhCR82ypdBeREmPM2VhJ9VEi4jXG3A78GMgQkcbHxahIFCWU+KuqcOXkWFJZubJWKpMm4siaQpdxYzGR+mXdFgi7SOwgLgeewSr/fV1E/mSM+QPwmYi8b4x5FJiKNW11BPi5iOwwxnQCPrcvUwbcISJb7Gt6gTzAab/+joj84WRxqEgUJTz4Kytx5azGuXQJzhUrkcpKIhMTa6Uy9hyVSiumVYiktaAiUZTw46+sxLUqh7KlS3CtXGVJJSkJx6SJxE/OUqm0QlQkAahIFKV14a+owJWzmrIlS3CtXIlUVdlSmUR81mS6nKNSaQ2oSAJQkShK68WSSo5V/bVqlSWVnkk4Jk3GkTWZzmPGqFTChIokABWJorQN/OXldaVSXU1Uz57ET5qEY0qWJZUm7s/REfFXVOAtKcFbXIy3uBhfSQmOK68iMu709nVXkQSgIlGUtoe/vBzXqlWWVHJyLKn06lUrldGjO4RU/JWVeEtK8Nly8BaX4C2xRVFsS8N+3V9R8Z33D3r/PTqlpZ1W2yqSAFQkitK28ZeX41y5EueSJbhyVtdKZfJkSyqjRrUpqfirqvAWl+ArsSTgLSrGW1Jsy6LEHlUU4SsuwV9e3uA1Irt3JzIpkaiknkQlJhKVlEhkUhJRiUlE9UwiKjGRyMQkopIST3tqUEUSgIpEUdoPPlc5rpUrKVvyEeU5qxG3m6jevYmfPAlH1hQ6jxoZFqn43e66o4biInwlJfZjWxRFljj8robvxo/s1s2WQSJRSUkNiyIpiaiEhJCsxKwiCUBFoijtE5/LhWvFSsqWLKF8da1UHFmTiZ+c1Wyp+N1uWwa1OYdaUdgjCPuY3+ls8BoRDof15Z+YSFTPJGuUUPM4sXYEkZDQ6napVJEEoCJRlPaPJZUVlC1ZSnlODuLxENWnD47Jk4nPmkznkZZUxO3Ge+RI7XRSzdSSPdVUFCCHsrIG24qIj6+RQ80oISnREkPNc0sUEa1MDqeCiiQAFYmidCx8TmetVFavRjweIhMSwOfDV1ra4Hsi4uIsMfS08wyBo4aknkQlJdaIIyI2NsQ9Cg+tYT8SRVGUsBAZH0+3qVPpNnWqJZXlyylft56Irl1qE9JJdh7CfhzRqVO4w26zqEgURWnXRMbH0+3qq+l29dXhDqXd0nbq5RRFUZRWiYpEURRFaRYqEkVRFKVZqEgURVGUZqEiURRFUZqFikRRFEVpFioSRVEUpVmoSBRFUZRm0SGWSDHGFAF5p/n2JKC4BcNpC2ifOwba5/ZPc/s7QER6NnZShxBJczDGfNaUtWbaE9rnjoH2uf0Tqv7q1JaiKIrSLFQkiqIoSrNQkTTOy+EOIAxonzsG2uf2T0j6qzkSRVEUpVnoiERRFEVpFioSG2NMljFmpzFmtzHmVw28focx5itjzBZjzBpjTHo44mxJGutzwHk/MMaIMaZNV7s04TO+1RhTZH/GW4wxt4cjzpakKZ+xMeaHxpjtxphtxpgFoY6xpWnC5/x0wGe8yxhzLBxxtiRN6HOqMWaFMWazMeZLY8zlLRqAiHT4f0AkkAsMBmKAL4D0euc4Ah5PBZaEO+5g99k+Lx7IAT4FxoY77iB/xrcC88Ida4j7PAzYDPSwn/cKd9zB7nO98+8GXg933CH4nF8Gfm4/Tgf2tmQMOiKxOBfYLSJ7RMQNLATqbKcmImUBT7sCbT251GifbR4G/huoCmVwQaCp/W1PNKXPPwGeF5GjACJyOMQxtjSn+jnfCLwZksiCR1P6LIDDftwNKGjJAFQkFsnA/oDn+faxOhhj7jTG5GJ9sc4MUWzBotE+G2NGA/1F5MNQBhYkmvQZA9fZQ/+3jTH9QxNa0GhKn9OANGPMWmPMp8aYrJBFFxya+jljjBkADAKWhyCuYNKUPs8Bphtj8oF/Yo3EWgwViYVp4Nh3Rhwi8ryIDAEeAH4b9KiCy0n7bIyJAJ4G7g1ZRMGlKZ/xB8BAETkb+AT4W9CjCi5N6XMU1vTWpVh/nb9qjOke5LiCSZN+l21uAN4WEV8Q4wkFTenzjcBfRSQFuByYb/+OtwgqEot8IPCvzxROPvRbCFwT1IiCT2N9jge+B6w0xuwFzgPeb8MJ90Y/YxEpEZFq++krwDkhii1YNOX/63zgPRHxiMi3wE4ssbRVTuV3+Qba/rQWNK3P/wksAhCR9UAnrHW4WgQVicUmYJgxZpAxJgbrf7D3A08wxgT+cl0BfBPC+ILBSfssIqUikiQiA0VkIFayfaqIfBaecJtNUz7jvgFPpwJfhzC+YNBon4F3gcsAjDFJWFNde0IaZcvSlD5jjBkO9ADWhzi+YNCUPu8DMgCMMSOwRFLUUgFEtdSF2jIi4jXGNP3+7AAAA1VJREFU3AUsxaqAeF1Ethlj/gB8JiLvA3cZYzIBD3AUuCV8ETefJva53dDE/s40xkwFvMARrCquNksT+7wUmGSM2Q74gF+KSEn4om4ep/D/9Y3AQrHLmNoyTezzvcArxph7sKa9bm3Jvuud7YqiKEqz0KktRVEUpVmoSBRFUZRmoSJRFEVRmoWKRFEURWkWKhJFURSlWahIFKWZGGPmGGPuawVx7LXvBVGUkKIiURRFUZqFikRRGsAY09UY83/GmC+MMVuNMT8K/IvfGDPWGLMy4C0jjTHLjTHfGGN+Yp/T1xiTY+97sdUYc5F9/EVjzGf2/h+/D2hzrzHmEWPMevv1McaYpcaYXGPMHfY5l9rXXGzvIfKXhtZMMsZMN8ZstNt+yRgTGcz/XkrHRkWiKA2TBRSIyEgR+R6wpJHzz8ZaOud84HfGmH7ATcBSERkFjAS22Of+RkTG2u+5xBhzdsB19ovI+cBq4K/AD7DWOftDwDnnYt2pfBYwBLg2MBB7CYwfARfYbfuA/ziFvivKKaFLpChKw3wF/NkY8zjwoYisNqahRVZreE9EKoFKY8wKrC/7TcDrxpho4F0ROS6SHxpjfor1+9cXa6OhL+3Xji/h8RUQJyJOwGmMqQpYlXejiOwBMMa8CVwIvB0QSwbWgpOb7Jg7A219nxGlFaMiUZQGEJFdxphzsJbcftQY8zHWGlzHR/Gd6r/lu5eQHGPMxVgjlfnGmCewRhr3AeNE5Kgx5q/1rnV89WF/wOPjz4//vn6nrXrPDfA3EXmwkW4qSougU1uK0gD21FSFiGQDfwbGAHupXVr+unpvudoY08kYk4i1t8cme+OkwyLyCvCafQ0HUA6UGmN6A1NOI7xz7ZVeI7CmsNbUe30Z8ANjTC+7Lwl2LIoSFHREoigNcxbwhDHGj7Xi88+xpoheM8b8GthQ7/yNwP8BqcDDIlJgjLkF+KUxxgO4gJtF5FtjzGZgG9Zy7WtPI7b1wGN2jDnA4sAXRWS7Mea3wMe2bDzAnUDeabSlKI2iq/8qShvCGHMpcJ+IXBnuWBTlODq1pSiKojQLHZEoiqIozUJHJIqiKEqzUJEoiqIozUJFoiiKojQLFYmiKIrSLFQkiqIoSrNQkSiKoijN4v8DkFwyGMgTEYoAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x203806c30b8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 打印训练不同参数subsample 和colsample_bytree 的 loglos\n",
    "print(\"Best: %f using %s\" % (gsearch4.best_score_, gsearch4.best_params_))\n",
    "test_means = gsearch4.cv_results_[ 'mean_test_score' ]\n",
    "test_stds = gsearch4.cv_results_[ 'std_test_score' ]\n",
    "train_means = gsearch4.cv_results_[ 'mean_train_score' ]\n",
    "train_stds = gsearch4.cv_results_[ 'std_train_score' ]\n",
    "\n",
    "pd.DataFrame(gsearch4.cv_results_).to_csv('my_preds_subsampleh_colsample_bytree_1.csv')\n",
    "\n",
    "# plot results\n",
    "test_scores = np.array(test_means).reshape(len(colsample_bytree), len(subsample))\n",
    "train_scores = np.array(train_means).reshape(len(colsample_bytree), len(subsample))\n",
    "\n",
    "for i, value in enumerate(colsample_bytree):\n",
    "    plt.plot(subsample, -test_scores[i], label= 'test_colsample_bytree:'   + str(value))\n",
    "\n",
    "    \n",
    "plt.legend()\n",
    "plt.xlabel( 'subsample' )                                                                                                      \n",
    "plt.ylabel( '-Log Loss' )\n",
    "plt.savefig( 'subsample_vs_colsample_bytree1.png' )"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 第五步：调整正则化参数：reg_alpha 和reg_lambda"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'reg_alpha': [0.5, 1, 1.5, 2], 'reg_lambda': [0.5, 1, 1.5]}"
      ]
     },
     "execution_count": 50,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "reg_alpha = [ 0.5,1,1.5, 2]    #default = 0, 测试0.1,0.5,1，1.5，2\n",
    "reg_lambda = [0.5, 1, 1.5]      #default = 1，测试0.5， 1， 1.5\n",
    "\n",
    "param_test4 = dict(reg_alpha=reg_alpha, reg_lambda=reg_lambda)\n",
    "param_test4\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "GridSearchCV(cv=StratifiedKFold(n_splits=5, random_state=3, shuffle=True),\n",
       "       error_score='raise',\n",
       "       estimator=XGBClassifier(base_score=0.5, booster='gbtree', colsample_bylevel=0.7,\n",
       "       colsample_bytree=0.7, gamma=0, learning_rate=0.1, max_delta_step=0,\n",
       "       max_depth=9, min_child_weight=5, missing=None, n_estimators=66,\n",
       "       n_jobs=1, nthread=None, objective='multi:softprob', random_state=0,\n",
       "       reg_alpha=0, reg_lambda=1, scale_pos_weight=1, seed=3, silent=True,\n",
       "       subsample=0.9),\n",
       "       fit_params=None, iid=True, n_jobs=-1,\n",
       "       param_grid={'reg_alpha': [0.5, 1, 1.5, 2], 'reg_lambda': [0.5, 1, 1.5]},\n",
       "       pre_dispatch='2*n_jobs', refit=True, return_train_score='warn',\n",
       "       scoring='neg_log_loss', verbose=0)"
      ]
     },
     "execution_count": 52,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xgb6 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=66,  #第二轮参数调整得到的n_estimators最优值\n",
    "        max_depth=9,\n",
    "        min_child_weight=5,\n",
    "        gamma=0,\n",
    "        subsample=0.9,    #使用上面的结果\n",
    "        colsample_bytree=0.7,#使用上面的结果\n",
    "        colsample_bylevel = 0.7,\n",
    "        objective= 'multi:softprob',\n",
    "        seed=3)\n",
    "\n",
    "\n",
    "gsearch5 = GridSearchCV(xgb6, param_grid = param_test4, scoring='neg_log_loss',n_jobs=-1, cv=kflod)\n",
    "gsearch5.fit(X_train , y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'mean_fit_time': array([80.8147944 , 81.01709113, 81.39864845, 83.50058908, 84.04004564,\n",
       "        81.74254565, 81.55219469, 81.2085927 , 81.47113175, 81.37423964,\n",
       "        81.44299998, 65.72258143]),\n",
       " 'mean_score_time': array([0.29690633, 0.29378409, 0.40630164, 0.31565537, 0.29378476,\n",
       "        0.29691195, 0.30315309, 0.30315652, 0.3000257 , 0.28128057,\n",
       "        0.29690313, 0.24065824]),\n",
       " 'mean_test_score': array([-0.59127321, -0.59170329, -0.59164759, -0.59106721, -0.59137971,\n",
       "        -0.59111226, -0.59176002, -0.59187839, -0.59177027, -0.59173902,\n",
       "        -0.59281475, -0.5929373 ]),\n",
       " 'mean_train_score': array([-0.41596729, -0.4206194 , -0.42419909, -0.42441503, -0.42874463,\n",
       "        -0.43236703, -0.43334315, -0.43817643, -0.44107632, -0.44326794,\n",
       "        -0.44636705, -0.44931274]),\n",
       " 'param_reg_alpha': masked_array(data=[0.5, 0.5, 0.5, 1, 1, 1, 1.5, 1.5, 1.5, 2, 2, 2],\n",
       "              mask=[False, False, False, False, False, False, False, False,\n",
       "                    False, False, False, False],\n",
       "        fill_value='?',\n",
       "             dtype=object),\n",
       " 'param_reg_lambda': masked_array(data=[0.5, 1, 1.5, 0.5, 1, 1.5, 0.5, 1, 1.5, 0.5, 1, 1.5],\n",
       "              mask=[False, False, False, False, False, False, False, False,\n",
       "                    False, False, False, False],\n",
       "        fill_value='?',\n",
       "             dtype=object),\n",
       " 'params': [{'reg_alpha': 0.5, 'reg_lambda': 0.5},\n",
       "  {'reg_alpha': 0.5, 'reg_lambda': 1},\n",
       "  {'reg_alpha': 0.5, 'reg_lambda': 1.5},\n",
       "  {'reg_alpha': 1, 'reg_lambda': 0.5},\n",
       "  {'reg_alpha': 1, 'reg_lambda': 1},\n",
       "  {'reg_alpha': 1, 'reg_lambda': 1.5},\n",
       "  {'reg_alpha': 1.5, 'reg_lambda': 0.5},\n",
       "  {'reg_alpha': 1.5, 'reg_lambda': 1},\n",
       "  {'reg_alpha': 1.5, 'reg_lambda': 1.5},\n",
       "  {'reg_alpha': 2, 'reg_lambda': 0.5},\n",
       "  {'reg_alpha': 2, 'reg_lambda': 1},\n",
       "  {'reg_alpha': 2, 'reg_lambda': 1.5}],\n",
       " 'rank_test_score': array([ 3,  6,  5,  1,  4,  2,  8, 10,  9,  7, 11, 12]),\n",
       " 'split0_test_score': array([-0.60088594, -0.60097315, -0.60115737, -0.60005928, -0.60057689,\n",
       "        -0.60019012, -0.60118533, -0.60091437, -0.60128193, -0.60281248,\n",
       "        -0.60282129, -0.60239589]),\n",
       " 'split0_train_score': array([-0.40844863, -0.41451843, -0.41907158, -0.41916179, -0.42389811,\n",
       "        -0.42866744, -0.42951461, -0.4341144 , -0.43754547, -0.44030803,\n",
       "        -0.44210866, -0.44549737]),\n",
       " 'split1_test_score': array([-0.58639969, -0.58492719, -0.58641741, -0.58560097, -0.58536235,\n",
       "        -0.58559281, -0.58544981, -0.58513756, -0.58501065, -0.58556576,\n",
       "        -0.58683009, -0.58664439]),\n",
       " 'split1_train_score': array([-0.42079896, -0.42625429, -0.4272139 , -0.43033857, -0.43300557,\n",
       "        -0.43486753, -0.43485889, -0.44031677, -0.4448319 , -0.44516397,\n",
       "        -0.44934696, -0.45069174]),\n",
       " 'split2_test_score': array([-0.59342716, -0.59523533, -0.5927169 , -0.593455  , -0.59309117,\n",
       "        -0.59414326, -0.59461794, -0.59498889, -0.59525321, -0.5948978 ,\n",
       "        -0.59550508, -0.59565843]),\n",
       " 'split2_train_score': array([-0.41542892, -0.42036458, -0.42513355, -0.42449397, -0.42875679,\n",
       "        -0.43196008, -0.43444523, -0.43826859, -0.44224842, -0.44475185,\n",
       "        -0.44760907, -0.44960389]),\n",
       " 'split3_test_score': array([-0.58914842, -0.5901125 , -0.59046415, -0.5896691 , -0.58947834,\n",
       "        -0.58953876, -0.58947136, -0.58993308, -0.59005027, -0.59020442,\n",
       "        -0.59165681, -0.59230233]),\n",
       " 'split3_train_score': array([-0.41765288, -0.42050475, -0.42518448, -0.42392028, -0.42906281,\n",
       "        -0.43258777, -0.43361194, -0.43994922, -0.43993606, -0.44251689,\n",
       "        -0.44601792, -0.44989789]),\n",
       " 'split4_test_score': array([-0.58650128, -0.5872653 , -0.58747887, -0.58654858, -0.58838689,\n",
       "        -0.58609308, -0.58807256, -0.58841523, -0.58725215, -0.58521059,\n",
       "        -0.58725698, -0.58768235]),\n",
       " 'split4_train_score': array([-0.41750704, -0.42145496, -0.42439192, -0.42416052, -0.42899985,\n",
       "        -0.43375232, -0.4342851 , -0.43823317, -0.44081976, -0.44359895,\n",
       "        -0.44675264, -0.45087283]),\n",
       " 'std_fit_time': array([0.36186311, 0.19752915, 0.38169678, 1.27953655, 1.39829746,\n",
       "        0.13442623, 0.11540939, 0.34012997, 0.16347061, 0.40164999,\n",
       "        0.48541886, 7.60670773]),\n",
       " 'std_score_time': array([0.022098  , 0.01169497, 0.0894999 , 0.0694657 , 0.01822797,\n",
       "        0.01397271, 0.01875665, 0.01875165, 0.02296099, 0.0098834 ,\n",
       "        0.00988212, 0.02538986]),\n",
       " 'std_test_score': array([0.00544255, 0.00577191, 0.00524862, 0.00526945, 0.00522161,\n",
       "        0.00547266, 0.00558008, 0.00552391, 0.00585996, 0.00656836,\n",
       "        0.00592356, 0.00573611]),\n",
       " 'std_train_score': array([0.00413224, 0.00373497, 0.0027299 , 0.00354967, 0.00289174,\n",
       "        0.00210109, 0.00195598, 0.00220162, 0.0024212 , 0.00174537,\n",
       "        0.00240112, 0.00196569])}"
      ]
     },
     "execution_count": 57,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "\n",
    "gsearch5.cv_results_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\model_selection\\_search.py:761: DeprecationWarning: The grid_scores_ attribute was deprecated in version 0.18 in favor of the more elaborate cv_results_ attribute. The grid_scores_ attribute will not be available from 0.20\n",
      "  DeprecationWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "([mean: -0.59127, std: 0.00544, params: {'reg_alpha': 0.5, 'reg_lambda': 0.5},\n",
       "  mean: -0.59170, std: 0.00577, params: {'reg_alpha': 0.5, 'reg_lambda': 1},\n",
       "  mean: -0.59165, std: 0.00525, params: {'reg_alpha': 0.5, 'reg_lambda': 1.5},\n",
       "  mean: -0.59107, std: 0.00527, params: {'reg_alpha': 1, 'reg_lambda': 0.5},\n",
       "  mean: -0.59138, std: 0.00522, params: {'reg_alpha': 1, 'reg_lambda': 1},\n",
       "  mean: -0.59111, std: 0.00547, params: {'reg_alpha': 1, 'reg_lambda': 1.5},\n",
       "  mean: -0.59176, std: 0.00558, params: {'reg_alpha': 1.5, 'reg_lambda': 0.5},\n",
       "  mean: -0.59188, std: 0.00552, params: {'reg_alpha': 1.5, 'reg_lambda': 1},\n",
       "  mean: -0.59177, std: 0.00586, params: {'reg_alpha': 1.5, 'reg_lambda': 1.5},\n",
       "  mean: -0.59174, std: 0.00657, params: {'reg_alpha': 2, 'reg_lambda': 0.5},\n",
       "  mean: -0.59281, std: 0.00592, params: {'reg_alpha': 2, 'reg_lambda': 1},\n",
       "  mean: -0.59294, std: 0.00574, params: {'reg_alpha': 2, 'reg_lambda': 1.5}],\n",
       " {'reg_alpha': 1, 'reg_lambda': 0.5},\n",
       " -0.5910672077942042)"
      ]
     },
     "execution_count": 58,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gsearch5.grid_scores_, gsearch5.best_params_,     gsearch5.best_score_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best: -0.591067 using {'reg_alpha': 1, 'reg_lambda': 0.5}\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x20380368c50>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 打印训练不同参数reg_alpha 和reg_lambda 的 loglos\n",
    "print(\"Best: %f using %s\" % (gsearch5.best_score_, gsearch5.best_params_))\n",
    "test_means = gsearch5.cv_results_[ 'mean_test_score' ]\n",
    "test_stds = gsearch5.cv_results_[ 'std_test_score' ]\n",
    "train_means = gsearch5.cv_results_[ 'mean_train_score' ]\n",
    "train_stds = gsearch5.cv_results_[ 'std_train_score' ]\n",
    "\n",
    "pd.DataFrame(gsearch5.cv_results_).to_csv('my_preds_reg_alpha_reg_lambda_1.csv')\n",
    "\n",
    "# plot results\n",
    "test_scores = np.array(test_means).reshape(len(reg_alpha), len(reg_lambda))\n",
    "train_scores = np.array(train_means).reshape(len(reg_alpha), len(reg_lambda))\n",
    "\n",
    "    \n",
    "for i, value in enumerate(reg_alpha):\n",
    "    plt.plot(reg_lambda, -test_scores[i], label= 'reg_alpha:'   + str(value))\n",
    "\n",
    "    \n",
    "plt.legend()\n",
    "plt.xlabel( 'reg_alpha' )                                                                                                      \n",
    "plt.ylabel( '-Log Loss' )\n",
    "plt.savefig( 'reg_alpha_vs_reg_lambda1.png' )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
